Run
Generate a symbol library from source code and binary inputs to enable structured event processing at runtime.
Setup Guide
Follow the steps below. Steps that require customization link to the relevant Configuration section where you can edit on github.dev or locally.
Step 1: Install
Install the Cloud binary flavor:
Step 2: Set Environment Variables
Set these environment variables before running. See path configuration for details.
| Variable | Description |
|---|---|
TENX_CONFIG |
Path to your configuration directory |
TENX_API_KEY |
Your Log10x API key (get one) |
GH_TOKEN |
GitHub personal access token (create one) (optional) |
DOCKER_USERNAME |
Docker registry username (Docker Hub) (optional) |
DOCKER_TOKEN |
Docker registry token (Docker Hub) (optional) |
ARTIFACTORY_TOKEN |
JFrog Artifactory token (create one) (optional) |
export TENX_CONFIG=/path/to/your/config
export TENX_API_KEY=your-api-key
export GH_TOKEN=your-github-token
See best practices for managing secrets in production.
Step 3: Set Up Input Sources
Specify source code or binary inputPaths to scan.
Clone a repository to the default input path:
Configure githubPull to pull repos automatically:
Configure helmChartNames to pull from Helm charts:
The compiler uses Docker CLI and Helm. The Docker image includes these; otherwise ensure helmCommand and dockerCommand are valid.
Step 4: Configure Output
- Set outputSymbolFolder for symbol unit files
- Set outputSymbolLibraryFile for the final library file
Step 5: Push to GitHub (optional)
Push outputs to GitHub for GitOps workflows, enabling symbol reuse and delivery to edge/cloud apps:
Step 6: Run
Best for: Isolated environments with local configuration.
Best for: CI/CD pipelines with version-controlled configuration.
Step 7: Verify
Verify no errors appear in the log file.
Check output files:
Verify symbol files were generated in your configured outputSymbolFolder and outputSymbolLibraryFile paths.
Configuration
To configure the Compiler app, Edit these settings:
Main Config
Main Config
The main config file loads the Compiler app's required modules.
Uncomment selected modules at: compiler/config.yaml.
#
# 🔟❎ Compiler app main config
# The compile app produces symbol library files which enable 10x apps to
# transform log/trace events into well-defined TenXObjects at runtime.
# To learn more see https://doc.log10x.com/apps/compiler
# =========================== Bootstrap Compiler ==============================
# To learn more see https://doc.log10x.com/compile/bootstrap
tenx: compile
runtimeName: $=TenXEnv.get("TENX_RUNTIME_NAME", "myCompiler")
# ============================ Load App Modules ===============================
# Uncomment and edit selected config.yaml files in the folders below (e.g., compile/scanners/config.yaml)
include:
# ------------------------------ App settings ---------------------------------
# Load general app settings:
- compiler
# Load gitops settings for pulling additional assets from Github.
# Edit the gitops/config.yaml file with specific config
#
# For additional info see - https://doc.log10x.com/config/github
- gitops
# --------------------------- Process Inputs --------------------------------
# Process input source code and binary files on disk.
- compile/scanners # https://doc.log10x.com/compile/scan
# ---------------------------- Pull Inputs ----------------------------------
# This application can fetch source/binary files from remote inputs
# Uncomment and edit config files (e.g. compile/pull/github/config.yaml) to remote pull
#
- compile/pull/github # https://doc.log10x.com/compile/pull/github
- compile/pull/docker # https://doc.log10x.com/compile/pull/docker
- compile/pull/helm # https://doc.log10x.com/compile/pull/helm
# - compile/pull/artifactory # https://doc.log10x.com/compile/pull/artifactory
# ---------------------------- Link Output ----------------------------------
# Link output files into a single symbol library artifact for runtime use
- compile/link # https://doc.log10x.com/compile/link
# ---------------------------- Push Output ----------------------------------
# Push output files to GitHub for use by subsequent compile and run instances
# - compile/push # https://doc.log10x.com/compile/push
Pull
Pull
Activate a Repo Fetcher to pull input source code/binary files from remote repositories.
github
Configure GitHub repositories to pull folders from GitHub repositories to scan for symbol content.
Below is the default configuration from: github/config.yaml (* Required Fields).
ewogICJ0eXBlIiA6ICJvYmplY3QiLAogICJwcm9wZXJ0aWVzIiA6IHsKICAgICJ0ZW54IiA6IHsKICAgICAgInR5cGUiIDogInN0cmluZyIKICAgIH0sCiAgICAiZ2l0aHViUHVsbCIgOiB7CiAgICAgICJ0eXBlIiA6ICJhcnJheSIsCiAgICAgICJpdGVtcyIgOiB7CiAgICAgICAgInR5cGUiIDogIm9iamVjdCIsCiAgICAgICAgImFkZGl0aW9uYWxQcm9wZXJ0aWVzIiA6IGZhbHNlLAogICAgICAgICJwcm9wZXJ0aWVzIiA6IHsKICAgICAgICAgICJyZXBvcyIgOiB7CiAgICAgICAgICAgICJ0eXBlIiA6IFsKICAgICAgICAgICAgICAiYXJyYXkiLAogICAgICAgICAgICAgICJudWxsIgogICAgICAgICAgICBdLAogICAgICAgICAgICAibWFya2Rvd25EZXNjcmlwdGlvbiIgOiAiTmFtZXMgb2YgcmVwbyhzKSB0byBwdWxsXG5cbklkZW50aWZpZXMgR2l0SHViIHJlcG9zaXRvcmllcyB0byBwdWxsIGluIHRoZSBmb3JtIG9mIHVzZXJuYW1lL293bmVyIChlLmcuLCBvcGVuc2VhcmNoLXByb2plY3QvT3BlblNlYXJjaCkiLAogICAgICAgICAgICAiaXRlbXMiIDogewogICAgICAgICAgICAgICJ0eXBlIiA6ICJzdHJpbmciCiAgICAgICAgICAgIH0KICAgICAgICAgIH0sCiAgICAgICAgICAidG9rZW4iIDogewogICAgICAgICAgICAidHlwZSIgOiBbCiAgICAgICAgICAgICAgInN0cmluZyIsCiAgICAgICAgICAgICAgIm51bGwiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJHaXRIdWIgQVBJIGFjY2VzcyB0b2tlblxuXG5EZWZpbmVzIGFuIGFjY2VzcyB0b2tlbiBmb3IgYWNjZXNzaW5nIEdpdGh1YiByZXBvcy4gVG8gbGVhcm4gbW9yZSBzZWUgW0dpdEh1YiB0b2tlbnNdKGh0dHBzOi8vZG9jcy5naXRodWIuY29tL2VuL2F1dGhlbnRpY2F0aW9uL2tlZXBpbmcteW91ci1hY2NvdW50LWFuZC1kYXRhLXNlY3VyZS9tYW5hZ2luZy15b3VyLXBlcnNvbmFsLWFjY2Vzcy10b2tlbnMpLiAgIFRoaXMgdmFsdWUgc2hvdWxkIGJlIHNldCB2aWEgYW4gW2Vudmlyb25tZW50IHZhcmlhYmxlXShodHRwczovL2RvYy5sb2cxMHguY29tL2FwaS9qcy8jVGVuWEVudi5nZXQpOiAgYGBgIHlhbWwgZ2l0aHViUHVsbFRva2VuOiAkPVRlblhFbnYuZ2V0KFwiR0hfVE9LRU5cIikgYGBgIgogICAgICAgICAgfSwKICAgICAgICAgICJicmFuY2giIDogewogICAgICAgICAgICAidHlwZSIgOiBbCiAgICAgICAgICAgICAgInN0cmluZyIsCiAgICAgICAgICAgICAgIm51bGwiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJUYXJnZXQgYnJhbmNoXG5cblNwZWNpZmllcyB0aGUgYnJhbmNoIHRvIHVzZSB3aGVuIHB1bGxpbmcgZnJvbSBbZ2l0aHViUHVsbFJlcG9zXShodHRwczovL2RvYy5sb2cxMHguY29tL2NvbXBpbGUvcHVsbC9naXRodWIvI2dpdGh1YnB1bGxyZXBvcykuIElmIG9taXR0ZWQsIHVzZSB0aGUgcmVwb3NpdG9yeSdzIGRlZmF1bHQgYnJhbmNoLiIKICAgICAgICAgIH0sCiAgICAgICAgICAiZm9sZGVycyIgOiB7CiAgICAgICAgICAgICJ0eXBlIiA6IFsKICAgICAgICAgICAgICAiYXJyYXkiLAogICAgICAgICAgICAgICJudWxsIgogICAgICAgICAgICBdLAogICAgICAgICAgICAibWFya2Rvd25EZXNjcmlwdGlvbiIgOiAiUmVwbyBmb2xkZXJzIHRvIHB1bGxcblxuSWRlbnRpZmllcyBmb2xkZXIocykgd2l0aGluIFtnaXRodWJQdWxsUmVwb3NdKGh0dHBzOi8vZG9jLmxvZzEweC5jb20vY29tcGlsZS9wdWxsL2dpdGh1Yi8jZ2l0aHVicHVsbHJlcG9zKSB0byBwdWxsLiBpZiBvbWl0dGVkLCB0aGUgZW50aXJlIHJlcG8gaXMgcHVsbGVkLiIsCiAgICAgICAgICAgICJpdGVtcyIgOiB7CiAgICAgICAgICAgICAgInR5cGUiIDogInN0cmluZyIKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgInJlcXVpcmVkIiA6IFsKICAgICAgICAgICJ0b2tlbiIKICAgICAgICBdCiAgICAgIH0KICAgIH0KICB9LAogICJhZGRpdGlvbmFsUHJvcGVydGllcyIgOiBmYWxzZQp9
# 🔟❎ 'compile' GitHub pull sources configuration
# Configures GitHub repositories folders to pull to disk to scan its contents.
# To learn more see https://doc.log10x.com/compile/pull/github
# For a reference list of industry-standard frameworks, see:
# modules/pipelines/compile/modules/pull/github/library.yaml
# Set the 10x pipeline to 'compile'
tenx: compile
# ============================== GitHub Options ===============================
githubPull:
# 'token' specifies the access token for this repo using a shell variable (recommended) or inline
# See https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens
- token: $=TenXEnv.get("GH_TOKEN") # (❗ EnvVar REQUIRED)
# 'repo' specifies the repo names to pull from Github (e.g., apache/spark)
repos: [
#owner/project
]
# 'branch' specifies the branch to pull within 'repos'. If not set, pulls each repo's default branch
branch: null
# 'repoFolders' defines folders within 'repos' to pull. If not specified, pull the entire repo
folders: [
# src/main
]
docker
Configure the Docker image to pull Docker image files to scan for symbol content.
Below is the default configuration from: docker/config.yaml (* Required Fields).
ewogICJ0eXBlIiA6ICJvYmplY3QiLAogICJwcm9wZXJ0aWVzIiA6IHsKICAgICJ0ZW54IiA6IHsKICAgICAgInR5cGUiIDogInN0cmluZyIKICAgIH0sCiAgICAiZG9ja2VyIiA6IHsKICAgICAgInR5cGUiIDogIm9iamVjdCIsCiAgICAgICJhZGRpdGlvbmFsUHJvcGVydGllcyIgOiBmYWxzZSwKICAgICAgInByb3BlcnRpZXMiIDogewogICAgICAgICJpbWFnZXMiIDogewogICAgICAgICAgInR5cGUiIDogWwogICAgICAgICAgICAiYXJyYXkiLAogICAgICAgICAgICAibnVsbCIKICAgICAgICAgIF0sCiAgICAgICAgICAibWFya2Rvd25EZXNjcmlwdGlvbiIgOiAiRG9ja2VyIGltYWdlIGZpbGVzIHRvIHB1bGxcblxuU3BlY2lmaWVzIHRoZSBVUkxzIGZvciB0aGUgcmVtb3RlIERvY2tlciBpbWFnZXMgdG8gcHVsbCBpbiB0aGUgZm9ybSBvZjogYDxjb250YWluZXItcmVwb3NpdG9yeT4vPGltYWdlPi88dmVyc2lvbj5gLiBGb3IgZXhhbXBsZTogIGBgYCB5YW1sICBkb2NrZXJJbWFnZXM6IC0gZG9ja2VyLmlvL2dyYWZhbmEvZ3JhZmFuYToxMS4xLjAgYGBgIiwKICAgICAgICAgICJpdGVtcyIgOiB7CiAgICAgICAgICAgICJ0eXBlIiA6ICJzdHJpbmciCiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICAidXNlcm5hbWUiIDogewogICAgICAgICAgInR5cGUiIDogWwogICAgICAgICAgICAic3RyaW5nIiwKICAgICAgICAgICAgIm51bGwiCiAgICAgICAgICBdLAogICAgICAgICAgIm1hcmtkb3duRGVzY3JpcHRpb24iIDogIkRvY2tlciB1c2VyIG5hbWVcblxuU3BlY2lmaWVzIHRoZSBbdXNlciBuYW1lXShodHRwczovL2RvY3MuZG9ja2VyLmNvbS9yZWZlcmVuY2UvY2xpL2RvY2tlci9sb2dpbi8jdXNlcm5hbWUpIGZvciBhdXRoZW50aWNhdGluZyB0aGUgZG9ja2VyIGNsaWVudC4gSWYgdGhpcyB2YWx1ZSBpcyBub3Qgc2V0LCB0aGUgZG9ja2VyIGNsaWVudCBpcyBhc3N1bWVkIHRvIGJlIHByZS1hdXRoZW50aWNhdGVkLiAgVGhpcyB2YWx1ZSBzaG91bGQgYmUgc2V0IHZpYSBhbiBbZW52aXJvbm1lbnQgdmFyaWFibGVdKGh0dHBzOi8vZG9jLmxvZzEweC5jb20vYXBpL2pzLyNUZW5YRW52LmdldCk6ICBgYGAgeWFtbCBkb2NrZXJVc2VybmFtZTogJD1UZW5YRW52LmdldChcIkRPQ0tFUl9VU0VSTkFNRVwiKSBgYGAiCiAgICAgICAgfSwKICAgICAgICAicGFzc3dvcmQiIDogewogICAgICAgICAgInR5cGUiIDogWwogICAgICAgICAgICAic3RyaW5nIiwKICAgICAgICAgICAgIm51bGwiCiAgICAgICAgICBdLAogICAgICAgICAgIm1hcmtkb3duRGVzY3JpcHRpb24iIDogIkRvY2tlciBwYXNzd29yZFxuXG5TcGVjaWZpZXMgdGhlIHBhc3N3b3JkIGZvciBhdXRoZW50aWNhdGluZyB0aGUgZG9ja2VyIGNsaWVudCBpbiBjb25qdW5jdGlvbiB3aXRoIFtkb2NrZXJVc2VybmFtZV0oaHR0cHM6Ly9kb2MubG9nMTB4LmNvbS9jb21waWxlL3B1bGwvZG9ja2VyLyNkb2NrZXJ1c2VybmFtZSkuIFRoaXMgdmFsdWUgaXMgd3JpdHRlbiBpbnRvIHRoZSBkb2NrZXIgY2xpZW50J3Mgc3RkIGlucHV0IHZpYSB0aGUgbG9naW4gY29tbWFuZCdzIFtwYXNzd29yZC1zdGRpbl0oaHR0cHM6Ly9kb2NzLmRvY2tlci5jb20vcmVmZXJlbmNlL2NsaS9kb2NrZXIvbG9naW4vI3Bhc3N3b3JkLXN0ZGluKSBhcmd1bWVudC4gIFRoaXMgdmFsdWUgc2hvdWxkIGJlIHNldCB2aWEgYW4gW2Vudmlyb25tZW50IHZhcmlhYmxlXShodHRwczovL2RvYy5sb2cxMHguY29tL2FwaS9qcy8jVGVuWEVudi5nZXQpOiAgYGBgIHlhbWwgZG9ja2VyUGFzc3dvcmQ6ICQ9VGVuWEVudi5nZXQoXCJET0NLRVJfVE9LRU5cIikgYGBgIgogICAgICAgIH0sCiAgICAgICAgInJlbW92ZSIgOiB7CiAgICAgICAgICAidHlwZSIgOiBbCiAgICAgICAgICAgICJib29sZWFuIiwKICAgICAgICAgICAgInN0cmluZyIKICAgICAgICAgIF0sCiAgICAgICAgICAibWFya2Rvd25EZXNjcmlwdGlvbiIgOiAiUmVtb3ZlIGltYWdlIGFmdGVyIHNjYW5cblxuU3BlY2lmaWVzIHdoZXRoZXIgdG8gcmVtb3ZlIFtkb2NrZXJJbWFnZXNdKGh0dHBzOi8vZG9jLmxvZzEweC5jb20vY29tcGlsZS9wdWxsL2RvY2tlci8jZG9ja2VyaW1hZ2VzKSB1c2luZyBbZG9ja2VyIHJtaSAtZl0oaHR0cHM6Ly9kb2NzLmRvY2tlci5jb20vcmVmZXJlbmNlL2NsaS9kb2NrZXIvaW1hZ2Uvcm0vKSAoQWNjZXB0cyBib29sZWFuIG9yIHN0cmluZyB3aXRoICQ9IHByZWZpeCBmb3IgcnVudGltZSBldmFsdWF0aW9uKSAoRGVmYXVsdDogdHJ1ZSkiLAogICAgICAgICAgImRlZmF1bHQiIDogdHJ1ZQogICAgICAgIH0sCiAgICAgICAgImdpdGh1YlJlcG9Ub2tlbiIgOiB7CiAgICAgICAgICAidHlwZSIgOiBbCiAgICAgICAgICAgICJzdHJpbmciLAogICAgICAgICAgICAibnVsbCIKICAgICAgICAgIF0sCiAgICAgICAgICAibWFya2Rvd25EZXNjcmlwdGlvbiIgOiAiR2l0SHViIEFQSSB0b2tlbiBmb3IgcHVsbGluZyBpbWFnZSBzb3VyY2UgY29kZSByZXBvc2l0b3JpZXNcblxuRGVmaW5lcyBhbiBhY2Nlc3MgdG9rZW4gZm9yIHB1bGxpbmcgW0dpdGh1YiByZXBvc10oaHR0cHM6Ly9kb2MubG9nMTB4LmNvbS9jb21waWxlL3B1bGwvZ2l0aHViLykgcmVmZXJlbmNlZCBieSBhIHRhcmdldCBpbWFnZSdzIFtvcmcub3BlbmNvbnRhaW5lcnMuaW1hZ2Uuc291cmNlXShodHRwczovL2dpdGh1Yi5jb20vb3BlbmNvbnRhaW5lcnMvaW1hZ2Utc3BlYy9ibG9iL3YxLjAuMS9hbm5vdGF0aW9ucy5tZCNwcmUtZGVmaW5lZC1hbm5vdGF0aW9uLWtleXMpIHByb3BlcnR5LiAgSWYgdGhpcyBwcm9wZXJ0eSBpcyBub3QgYXZhaWxhYmxlIHdpdGhpbiB0aGUgW2ltYWdlIG1hbmlmZXN0XShodHRwczovL2RvY3MuZG9ja2VyLmNvbS9yZWZlcmVuY2UvY2xpL2RvY2tlci9tYW5pZmVzdC9pbnNwZWN0KSwgYW4gYXR0ZW1wdCBpcyBtYWRlIHRvIGluZmVyIGEgdmFsaWQgR2l0SHViIHJlcG8gbmFtZSBmcm9tIHRoZSBpbWFnZSBuYW1lLiBGb3IgZXhhbXBsZSwgZm9yIHRoZSB0aGUgdGFyZ2V0IGltYWdlIG5hbWU6IGBkb2NrZXIuaW8vZ3JhZmFuYS9ncmFmYW5hOjExLjEuMGAsIHRoZSBbZ3JhZmFuYS9ncmFmYW5hXShodHRwczovL2dpdGh1Yi5jb20vZ3JhZmFuYS9ncmFmYW5hKSBHaXRIdWIgcmVwbyBpcyBpbmZlcnJlZC4gIElmIG5vdCBhbiBBUEkgdG9rZW4gaXMgbm90IHNwZWNpZmllZCwgR2l0SHViIHJlcG9zIHJlZmVyZW5jZWQgd2l0aGluIGltYWdlIG1hbmlmZXN0cyBvciBpbmZlcnJlZCBmcm9tIGltYWdlIG5hbWVzIGFyZSBub3QgcHVsbGVkLiBUbyBsZWFybiBtb3JlIHNlZSBbR2l0SHViIHRva2Vuc10oaHR0cHM6Ly9kb2NzLmdpdGh1Yi5jb20vZW4vYXV0aGVudGljYXRpb24va2VlcGluZy15b3VyLWFjY291bnQtYW5kLWRhdGEtc2VjdXJlL21hbmFnaW5nLXlvdXItcGVyc29uYWwtYWNjZXNzLXRva2VucykuIgogICAgICAgIH0sCiAgICAgICAgImNvbW1hbmQiIDogewogICAgICAgICAgInR5cGUiIDogWwogICAgICAgICAgICAic3RyaW5nIiwKICAgICAgICAgICAgIm51bGwiCiAgICAgICAgICBdLAogICAgICAgICAgIm1hcmtkb3duRGVzY3JpcHRpb24iIDogIlBhdGggdG8gZG9ja2VyIGNvbW1hbmRcblxuRGVmaW5lcyB0aGUgcGF0aCB0byB0aGUgW2RvY2tlcl0oaHR0cHM6Ly9kb2NzLmRvY2tlci5jb20vcmVmZXJlbmNlL2NsaS9kb2NrZXIvKSBwcm9ncmFtIHVzZWQgcHVsbGluZyBhbmQgZXhwb3J0aW5nIGltYWdlcy4gKERlZmF1bHQ6ICpOSVg6IC91c3IvbG9jYWwvYmluL2RvY2tlciwgV2luOiBDOi9Qcm9ncmFtIEZpbGVzL0RvY2tlci9Eb2NrZXIvcmVzb3VyY2VzL2Jpbi9kb2NrZXIuZXhlKSIsCiAgICAgICAgICAiZGVmYXVsdCIgOiAiKk5JWDogL3Vzci9sb2NhbC9iaW4vZG9ja2VyLCBXaW46IEM6L1Byb2dyYW0gRmlsZXMvRG9ja2VyL0RvY2tlci9yZXNvdXJjZXMvYmluL2RvY2tlci5leGUiCiAgICAgICAgfQogICAgICB9CiAgICB9CiAgfSwKICAiYWRkaXRpb25hbFByb3BlcnRpZXMiIDogZmFsc2UKfQ==
# 🔟❎ 'compile' Docker configuration
# Pull docker images files using the Docker CLI client from container registries to
# scan for symbol values. To learn more see https://doc.log10x.com/compile/pull/docker
# Set the 10x pipeline to 'compile'
tenx: compile
# ============================= Docker Options ================================
docker:
# 'username' specifies the user name for authenticating the docker client.
# If not set, the docker client is assumed to be pre-authenticated.
# To learn more see https://docs.docker.com/reference/cli/docker/login/#username
username: $=TenXEnv.get("DOCKER_USERNAME") # (❗ EnvVar REQUIRED)
# 'password' specifies the password argument for authenticating the docker client login command.
# This value is written into the docker client's std input via the --password-stdin argument.
# To learn more see https://docs.docker.com/reference/cli/docker/login/#password-stdin.
password: $=TenXEnv.get("DOCKER_TOKEN") # (❗ EnvVar REQUIRED)
# 'command' specifies the location of docker cli https://docs.docker.com/reference/cli/docker/ program
#command: $=TenXString.includes(TenXEnv.get("os.name"), "Windows") ? "C:/Program Files/Docker/Docker/resources/bin/docker.exe":"/usr/local/bin/docker"
# 'images' specify images to pull and export to matching .tar files to scan
images: [
# docker.io/grafana/grafana:11.1.0
]
# 'remove' specifies whether to remove exported images once their contents are extracted.
# To learn more see https://docs.docker.com/reference/cli/docker/image/rm
remove: false
# 'githubRepoToken' defines an access token for pulling Github repos referenced
# by a target image's 'org.opencontainers.image.source' property.
githubRepoToken: $=TenXEnv.get("GH_TOKEN") # (❗ EnvVar REQUIRED)
helm
Configure the Helm chart to pull GitHub repositories and Docker images to scan for symbol content from Helm charts.
Below is the default configuration from: helm/config.yaml (* Required Fields).
ewogICJ0eXBlIiA6ICJvYmplY3QiLAogICJwcm9wZXJ0aWVzIiA6IHsKICAgICJ0ZW54IiA6IHsKICAgICAgInR5cGUiIDogInN0cmluZyIKICAgIH0sCiAgICAiaGVsbSIgOiB7CiAgICAgICJ0eXBlIiA6ICJvYmplY3QiLAogICAgICAiYWRkaXRpb25hbFByb3BlcnRpZXMiIDogZmFsc2UsCiAgICAgICJwcm9wZXJ0aWVzIiA6IHsKICAgICAgICAiY2hhcnROYW1lcyIgOiB7CiAgICAgICAgICAidHlwZSIgOiBbCiAgICAgICAgICAgICJhcnJheSIsCiAgICAgICAgICAgICJudWxsIgogICAgICAgICAgXSwKICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJMaXN0IG9mIGNoYXJ0cyB0byBwdWxsXG5cblNwZWNpZmllcyBhIGxpc3Qgb2YgY2hhcnQgbmFtZXMgKGUuZy4sIG9wZW4tdGVsZW1ldHJ5L29wZW50ZWxlbWV0cnktZGVtbykgdG8gcGFzcyB0byBbaGVsbUNvbW1hbmRdKGh0dHBzOi8vZG9jLmxvZzEweC5jb20vY29tcGlsZS9wdWxsL2hlbG0vI2hlbG1jb21tYW5kKS4gVGhlIHNjYW5uZXIgd2lsbCBpbnZva2UgdGhlIFt0ZW1wbGF0ZV0oaHR0cHM6Ly9oZWxtLnNoL2RvY3MvaGVsbS9oZWxtX3RlbXBsYXRlLykgYW5kIFtzaG93IGNoYXJ0XShodHRwczovL2hlbG0uc2gvZG9jcy9oZWxtL2hlbG1fc2hvd19jaGFydC8pIGNvbW1hbmRzIHRvIHB1bGwgaXRzIHZhbHVlcy55YW1sIGFuZCBjaGFydC55YW1sIGZpbGVzIHRvIHNjYW4gZm9yIERvY2tlciBjb250YWluZXIgaW1hZ2VzIGFuZCBHaXRIdWIgcmVwbyBmaWxlcy4iLAogICAgICAgICAgIml0ZW1zIiA6IHsKICAgICAgICAgICAgInR5cGUiIDogInN0cmluZyIKICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgICJjaGFydEZpbGVzIiA6IHsKICAgICAgICAgICJ0eXBlIiA6IFsKICAgICAgICAgICAgImFycmF5IiwKICAgICAgICAgICAgIm51bGwiCiAgICAgICAgICBdLAogICAgICAgICAgIm1hcmtkb3duRGVzY3JpcHRpb24iIDogIkxpc3Qgb2YgY2hhcnRzIHRlbXBsYXRlcyBhbmQgdmFsdWUgZmlsZXMgdG8gc2NhblxuXG5TcGVjaWZpZXMgYSBsaXN0IG9mIGNoYXJ0IHZhbHVlIGFuZCB0ZW1wbGF0ZXMgZmlsZXMgdG8gc2Nhbi4gVGhlc2UgZmlsZSBwYXRocyBtYXkgYmUgcmVsYXRpdmUgdG8gdGhlIGluY2x1ZGUgcGF0aHMgbGlzdC4gSWYgZmlsZSBwYXRocyBhcmUgY2Fub25pY2FsLCB0aGVpciBlbmNsb3NpbmcgZm9sZGVycyBtdXN0IGJlIGluY2x1ZGVkIGluIHRoZSBpbmNsdWRlUGF0aHMgYXJndW1lbnQuIiwKICAgICAgICAgICJpdGVtcyIgOiB7CiAgICAgICAgICAgICJ0eXBlIiA6ICJzdHJpbmciCiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICAicHVsbCIgOiB7CiAgICAgICAgICAidHlwZSIgOiAib2JqZWN0IiwKICAgICAgICAgICJhZGRpdGlvbmFsUHJvcGVydGllcyIgOiBmYWxzZSwKICAgICAgICAgICJwcm9wZXJ0aWVzIiA6IHsKICAgICAgICAgICAgImdpdGh1YiIgOiB7CiAgICAgICAgICAgICAgInR5cGUiIDogIm9iamVjdCIsCiAgICAgICAgICAgICAgImFkZGl0aW9uYWxQcm9wZXJ0aWVzIiA6IGZhbHNlLAogICAgICAgICAgICAgICJwcm9wZXJ0aWVzIiA6IHsKICAgICAgICAgICAgICAgICJyZXBvcyIgOiB7CiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6IFsKICAgICAgICAgICAgICAgICAgICAiYm9vbGVhbiIsCiAgICAgICAgICAgICAgICAgICAgInN0cmluZyIKICAgICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgICAgIm1hcmtkb3duRGVzY3JpcHRpb24iIDogIlB1bGwgR2l0SHViIHJlcG9zXG5cblNwZWNpZmllcyB3aGV0aGVyIHRvIHB1bGwgW0dpdEh1YiByZXBvc10oaHR0cHM6Ly9kb2MubG9nMTB4LmNvbS9jb21waWxlL3B1bGwvZ2l0aHViLykgcmVmZXJlbmNlZCBieSBhbiBpbnB1dCBIZWxtIHRlbXBsYXRlIGZpbGVzLiAoQWNjZXB0cyBib29sZWFuIG9yIHN0cmluZyB3aXRoICQ9IHByZWZpeCBmb3IgcnVudGltZSBldmFsdWF0aW9uKSIKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAidG9rZW4iIDogewogICAgICAgICAgICAgICAgICAidHlwZSIgOiBbCiAgICAgICAgICAgICAgICAgICAgInN0cmluZyIsCiAgICAgICAgICAgICAgICAgICAgIm51bGwiCiAgICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJHaXRIdWIgQVBJIHRva2VuIGZvciBwdWxsaW5nIHJlcG9zaXRvcmllc1xuXG5EZWZpbmVzIGFuIGFjY2VzcyB0b2tlbiBmb3IgcHVsbGluZyBbR2l0aHViIHJlcG9zXShodHRwczovL2RvYy5sb2cxMHguY29tL2NvbXBpbGUvcHVsbC9naXRodWIvKSByZWZlcmVuY2VkIGJ5IEhlbG0gY2hhcnRzLiIKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJkb2NrZXJJbWFnZXMiIDogewogICAgICAgICAgICAgICJ0eXBlIiA6IFsKICAgICAgICAgICAgICAgICJib29sZWFuIiwKICAgICAgICAgICAgICAgICJzdHJpbmciCiAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAibWFya2Rvd25EZXNjcmlwdGlvbiIgOiAiUHVsbCBkb2NrZXIgY29udGFpbmVyIGltYWdlc1xuXG5TcGVjaWZpZXMgd2hldGhlciB0byBwdWxsIFtEb2NrZXIgaW1hZ2VzXShodHRwczovL2RvYy5sb2cxMHguY29tL2NvbXBpbGUvcHVsbC9kb2NrZXIvKSByZWZlcmVuY2VkIGJ5IGFuIGlucHV0IEhlbG0gdmFsdWVzIGFuZCB0ZW1wbGF0ZSBmaWxlcy4gKEFjY2VwdHMgYm9vbGVhbiBvciBzdHJpbmcgd2l0aCAkPSBwcmVmaXggZm9yIHJ1bnRpbWUgZXZhbHVhdGlvbikgKERlZmF1bHQ6IHRydWUpIiwKICAgICAgICAgICAgICAiZGVmYXVsdCIgOiB0cnVlCiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgICJjb21tYW5kIiA6IHsKICAgICAgICAgICJ0eXBlIiA6IFsKICAgICAgICAgICAgInN0cmluZyIsCiAgICAgICAgICAgICJudWxsIgogICAgICAgICAgXSwKICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJQYXRoIHRvIEhlbG0gY29tbWFuZFxuXG5EZWZpbmVzIHRoZSBwYXRoIHRvIHRoZSBbSGVsbV0oaHR0cHM6Ly9oZWxtLnNoLykgcHJvZ3JhbSB1c2VkIGZvciBxdWVyeWluZyBjaGFydCB0ZW1wbGF0ZXMgYW5kIHZhbHVlcy4gVGhpcyB2YWx1ZSBtdXN0IGJlIHNldCBpZiBbaGVsbUNoYXJ0TmFtZXNdKGh0dHBzOi8vZG9jLmxvZzEweC5jb20vY29tcGlsZS9wdWxsL2hlbG0vI2hlbG1jaGFydG5hbWVzKSBpcyBzZXQuIChEZWZhdWx0OiAqTklYOiAvdXNyL2xvY2FsL2Jpbi9oZWxtLCBXaW46IEM6L1Byb2dyYW0gRmlsZXMvaGVsbS9oZWxtLmV4ZSkiLAogICAgICAgICAgImRlZmF1bHQiIDogIipOSVg6IC91c3IvbG9jYWwvYmluL2hlbG0sIFdpbjogQzovUHJvZ3JhbSBGaWxlcy9oZWxtL2hlbG0uZXhlIgogICAgICAgIH0sCiAgICAgICAgImdpdEh1YlJlcG9QYXRocyIgOiB7CiAgICAgICAgICAidHlwZSIgOiBbCiAgICAgICAgICAgICJzdHJpbmciLAogICAgICAgICAgICAibnVsbCIKICAgICAgICAgIF0sCiAgICAgICAgICAibWFya2Rvd25EZXNjcmlwdGlvbiIgOiAiWUFNTCBET00gcGF0aHMgZm9yIGV4dHJhY3RpbmcgR2l0SHViIHJlcG9zXG5cblNwZWNpZmllcyBwYXRocyB3aXRoaW4gYSBZQU1MIGZpbGUgdG8gdHJlYXQgYXMgaG9sZGVycyBmb3IgR2l0SHViIHJlcG8gbmFtZXMuIEZvciBleGFtcGxlLCBmb3IgdGhlIGZvbGxvd2luZyBzZWN0aW9uIGZyb20gYW4gaW5wdXQgY2hhcnQueWFtbCBmaWxlOiBgYGB5YW1sIHNvdXJjZXM6ICAgLSBodHRwczovL2dpdGh1Yi5jb20vb3Blbi10ZWxlbWV0cnkvb3BlbnRlbGVtZXRyeS1kZW1vICMgY2FwdHVyZSB0aGlzIEdpdEh1YiByZXBvIHJlZmVyZW5jZSBgYGAgKERlZmF1bHQ6IFttZXRhZGF0YS5yZXBvc2l0b3J5LCBzcGVjLnNvdXJjZS5naXQsIGNoYXJ0LnJlcG9zaXRvcnldKSIsCiAgICAgICAgICAiZGVmYXVsdCIgOiAiW21ldGFkYXRhLnJlcG9zaXRvcnksIHNwZWMuc291cmNlLmdpdCwgY2hhcnQucmVwb3NpdG9yeV0iCiAgICAgICAgfSwKICAgICAgICAiZG9ja2VySW1hZ2VQYXRocyIgOiB7CiAgICAgICAgICAidHlwZSIgOiBbCiAgICAgICAgICAgICJzdHJpbmciLAogICAgICAgICAgICAibnVsbCIKICAgICAgICAgIF0sCiAgICAgICAgICAibWFya2Rvd25EZXNjcmlwdGlvbiIgOiAiWUFNTCBET00gcGF0aHMgZm9yIGV4dHJhY3RpbmcgRG9ja2VyIHJlcG8gcmVmZXJlbmNlc1xuXG5TcGVjaWZpZXMgcGF0aHMgd2l0aGluIGEgaGVsbSBZQU1MIGZpbGUgdG8gdHJlYXQgYXMgaG9sZGVycyBmb3IgRG9ja2VyIGltYWdlIG5hbWVzLiBGb3IgZXhhbXBsZSwgZm9yIHRoZSBmb2xsb3dpbmcgc2VjdGlvbiBmcm9tIGFuIGlucHV0IHZhbHVlcy55YW1sIGZpbGU6IGBgYHlhbWwgICAgIHNwZWM6ICAgc2VydmljZUFjY291bnROYW1lOiBvcGVudGVsZW1ldHJ5LWRlbW8gICBjb250YWluZXJzOiAgIC0gbmFtZTogYWNjb3VudGluZ3NlcnZpY2UgICAgICBpbWFnZTogJ2RvY2tlci5pby9ncmFmYW5hL2dyYWZhbmE6MTEuMS4wJyAjIGNhcHR1cmUgdGhpcyBkb2NrZXIgaW1hZ2UgcmVmZXJlbmNlIGBgYCAoRGVmYXVsdDogW3NwZWMudGVtcGxhdGUuc3BlYy5jb250YWluZXJzLmltYWdlLCB2YWx1ZXMuaW1hZ2UsIHNwZWMuY29udGFpbmVycy5pbWFnZSwgc291cmNlc10pIiwKICAgICAgICAgICJkZWZhdWx0IiA6ICJbc3BlYy50ZW1wbGF0ZS5zcGVjLmNvbnRhaW5lcnMuaW1hZ2UsIHZhbHVlcy5pbWFnZSwgc3BlYy5jb250YWluZXJzLmltYWdlLCBzb3VyY2VzXSIKICAgICAgICB9CiAgICAgIH0KICAgIH0KICB9LAogICJhZGRpdGlvbmFsUHJvcGVydGllcyIgOiBmYWxzZQp9
# 🔟❎ 'compile' k8s Helm scanner configuration
# Configures the k8s Helm chart symbol scanner which pulls referenced GitHub source repositories and
# Docker container images to scan for symbol values.
# To learn more see https://doc.log10x.com/compile/pull/helm
# For a reference list of common infrastructure charts, see:
# modules/pipelines/compile/modules/pull/helm/library.yaml
# Set the 10x pipeline to 'compile'
tenx: compile
# =============================== Helm Options ===============================
helm:
# Charts can be specified as Helm chart names OR as local chart files.
# 'chartNames' specifies a list of remote chart names to scan for values and template files.
chartNames: [
# open-telemetry/opentelemetry-demo,
# ingress-nginx/ingress-nginx,
]
# 'chartFiles' specifies a list of local chart template and values.yaml files on disk.
# File paths may be relative to the 'includePaths' list. If canonical, enclosing folders must added to 'includePaths'.
chartFiles: [
# charts/opentelemetry-demo/values.yaml
]
pull:
# 'dockerImages' specifies whether to pull docker container images referenced by input charts
# To learn more see https://doc.log10x.com/compile/pull/docker
dockerImages: true
github:
# 'repos' specifies whether to pull GitHub repos referenced by 'org.opencontainers.image.source' annotations
# To learn more see https://github.com/opencontainers/image-spec/blob/v1.0.1/annotations.md#pre-defined-annotation-keys
repos: true
# 'token' specifies the GitHub access token for pulling from referenced repos
# To learn more see: https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens
token: $=TenXEnv.get("GH_TOKEN") # (❗ EnvVar REQUIRED)
artifactory
Configure Artifactory repositories to pull files from Artifactory repositories to scan for symbol content.
Below is the default configuration from: artifactory/config.yaml (* Required Fields).
ewogICJ0eXBlIiA6ICJvYmplY3QiLAogICJwcm9wZXJ0aWVzIiA6IHsKICAgICJ0ZW54IiA6IHsKICAgICAgInR5cGUiIDogInN0cmluZyIKICAgIH0sCiAgICAiYXJ0aWZhY3RvcnkiIDogewogICAgICAidHlwZSIgOiAiYXJyYXkiLAogICAgICAiaXRlbXMiIDogewogICAgICAgICJ0eXBlIiA6ICJvYmplY3QiLAogICAgICAgICJhZGRpdGlvbmFsUHJvcGVydGllcyIgOiBmYWxzZSwKICAgICAgICAicHJvcGVydGllcyIgOiB7CiAgICAgICAgICAiaW5zdGFuY2UiIDogewogICAgICAgICAgICAidHlwZSIgOiBbCiAgICAgICAgICAgICAgInN0cmluZyIsCiAgICAgICAgICAgICAgIm51bGwiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJBcnRpZmFjdG9yeSByZXBvc2l0b3J5IFVSTFxuXG5VUkwgZm9yIHRoZSByZW1vdGUgQXJ0aWZhY3RvcnkgaW5zdGFuY2UgKGUuZy4sIGh0dHBzOi8vbXl1c2VybmFtZS5qZnJvZy5pby9hcnRpZmFjdG9yeSkiCiAgICAgICAgICB9LAogICAgICAgICAgInRva2VuIiA6IHsKICAgICAgICAgICAgInR5cGUiIDogWwogICAgICAgICAgICAgICJzdHJpbmciLAogICAgICAgICAgICAgICJudWxsIgogICAgICAgICAgICBdLAogICAgICAgICAgICAibWFya2Rvd25EZXNjcmlwdGlvbiIgOiAiQXJ0aWZhY3RvcnkgaW5zdGFuY2UgYWNjZXNzIHRva2VuXG5cbkFydGlmYWN0b3J5IFthY2Nlc3MgdG9rZW5dKGh0dHBzOi8vamZyb2cuY29tL2hlbHAvci9qZnJvZy1wbGF0Zm9ybS1hZG1pbmlzdHJhdGlvbi1kb2N1bWVudGF0aW9uL2FjY2Vzcy10b2tlbnMpIGZvciB0aGlzIHJlbW90ZSBpbnN0YW5jZS4gVGhpcyB2YWx1ZSBzaG91bGQgYmUgc2V0IHZpYSBhbiBbZW52aXJvbm1lbnQgdmFyaWFibGVdKGh0dHBzOi8vZG9jLmxvZzEweC5jb20vYXBpL2pzLyNUZW5YRW52LmdldCk6ICBgYGAgeWFtbCBhcnRpZmFjdG9yeVRva2VuOiAkPVRlblhFbnYuZ2V0KFwiQVJUSUZBQ1RPUllfVE9LRU5cIikgYGBgIgogICAgICAgICAgfSwKICAgICAgICAgICJyZXBvIiA6IHsKICAgICAgICAgICAgInR5cGUiIDogWwogICAgICAgICAgICAgICJzdHJpbmciLAogICAgICAgICAgICAgICJudWxsIgogICAgICAgICAgICBdLAogICAgICAgICAgICAibWFya2Rvd25EZXNjcmlwdGlvbiIgOiAiQXJ0aWZhY3RvcnkgcmVwb3NpdG9yeSBuYW1lXG5cbk5hbWUgb2YgdGhlIFtyZXBvc2l0b3J5XShodHRwczovL2pmcm9nLmNvbS9oZWxwL3IvamZyb2ctYXJ0aWZhY3RvcnktZG9jdW1lbnRhdGlvbi9yZXBvc2l0b3J5LW1hbmFnZW1lbnQpIHdpdGhpbiB0aGUgdGFyZ2V0IEFydGlmYWN0b3J5IGluc3RhbmNlIGZyb20gd2hpY2ggdG8gcHVsbCB0aGUgc3BlY2lmaWVkIGZpbGUuIgogICAgICAgICAgfSwKICAgICAgICAgICJmaWxlcyIgOiB7CiAgICAgICAgICAgICJ0eXBlIiA6IFsKICAgICAgICAgICAgICAiYXJyYXkiLAogICAgICAgICAgICAgICJudWxsIgogICAgICAgICAgICBdLAogICAgICAgICAgICAibWFya2Rvd25EZXNjcmlwdGlvbiIgOiAiUmVtb3RlIHJlcG9zaXRvcnkgZmlsZSBwYXRoc1xuXG5QYXRocyBvZiBmaWxlcyB3aXRoaW4gdGhlIHRhcmdldCBBcnRpZmFjdG9yeSBpbnN0YW5jZSByZXBvc2l0b3J5IHRvIHB1bGwiLAogICAgICAgICAgICAiaXRlbXMiIDogewogICAgICAgICAgICAgICJ0eXBlIiA6ICJzdHJpbmciCiAgICAgICAgICAgIH0KICAgICAgICAgIH0sCiAgICAgICAgICAiZm9sZGVycyIgOiB7CiAgICAgICAgICAgICJ0eXBlIiA6IFsKICAgICAgICAgICAgICAiYXJyYXkiLAogICAgICAgICAgICAgICJudWxsIgogICAgICAgICAgICBdLAogICAgICAgICAgICAibWFya2Rvd25EZXNjcmlwdGlvbiIgOiAiUmVtb3RlIHJlcG9zaXRvcnkgZm9sZGVyIHBhdGhzXG5cblBhdGhzIG9mIGZvbGRlcnMgd2l0aGluIHRoZSB0YXJnZXQgQXJ0aWZhY3RvcnkgaW5zdGFuY2UgcmVwb3NpdG9yeSB0byBwdWxsIiwKICAgICAgICAgICAgIml0ZW1zIiA6IHsKICAgICAgICAgICAgICAidHlwZSIgOiAic3RyaW5nIgogICAgICAgICAgICB9CiAgICAgICAgICB9LAogICAgICAgICAgInJlY3Vyc2l2ZSIgOiB7CiAgICAgICAgICAgICJ0eXBlIiA6IFsKICAgICAgICAgICAgICAiYm9vbGVhbiIsCiAgICAgICAgICAgICAgInN0cmluZyIKICAgICAgICAgICAgXSwKICAgICAgICAgICAgIm1hcmtkb3duRGVzY3JpcHRpb24iIDogIlB1bGwgZmlsZXMgZnJvbSByZW1vdGUgcmVwb3NpdG9yeSBmb2xkZXJzIHJlY3Vyc2l2ZWx5XG5cblNwZWNpZmllcyB3aGV0aGVyIHRvIHB1bGwgZmlsZXMgZnJvbSBbYXJ0aWZhY3RvcnlGb2xkZXJzXShodHRwczovL2RvYy5sb2cxMHguY29tL2NvbXBpbGUvcHVsbC9hcnRpZmFjdG9yeS8jYXJ0aWZhY3Rvcnlmb2xkZXJzKSByZWN1cnNpdmVseSAoaS5lLiwgcHVsbCBzdWItZm9sZGVycyBhcyB3ZWxsKS4gKEFjY2VwdHMgYm9vbGVhbiBvciBzdHJpbmcgd2l0aCAkPSBwcmVmaXggZm9yIHJ1bnRpbWUgZXZhbHVhdGlvbikgKERlZmF1bHQ6IGZhbHNlKSIsCiAgICAgICAgICAgICJkZWZhdWx0IiA6IGZhbHNlCiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICAicmVxdWlyZWQiIDogWwogICAgICAgICAgImluc3RhbmNlIiwKICAgICAgICAgICJ0b2tlbiIsCiAgICAgICAgICAicmVwbyIKICAgICAgICBdCiAgICAgIH0KICAgIH0KICB9LAogICJhZGRpdGlvbmFsUHJvcGVydGllcyIgOiBmYWxzZQp9
# 🔟❎ 'compile' Artifactory configuration
# Pull artifacts (e.g., Java archives, .NET assemblies) from remote Artifactory instances to
# scan for symbol values. To learn more see https://doc.log10x.com/compile/pull/artifactory
# Set the 10x pipeline to 'compile'
tenx: compile
# ============================= Artifactory Options ===========================
artifactory:
# 'token' specifies an Artifactory API access token.
# To learn more see https://jfrog.com/help/r/jfrog-platform-administration-documentation/access-tokens
- token: $=TenXEnv.get("ARTIFACTORY_TOKEN") # (❗ REQUIRED)
# 'instance' specifies the of location of the remote Artifactory instance (e.g., https://demo.jfrog.io/artifactory)
instance: "" # (❗ REQUIRED)
# 'repo' specifies the target Artifactory repository (e.g., pypi-local)
repo: "" # (❗ REQUIRED)
# 'files' specifies files to pull from the target Artifactory repository # (❗ REQUIRED)
files: [
# dist/jfrog-pypi-example-1.0.0.tar.gz
]
# 'folders' specifies folders paths within the target Artifactory instance repository to pull # (❗ REQUIRED)
folders: [
]
# 'recursive' specifies whether to pull folders recursively (i.e., pull sub-folders as well).
recursive: true
Scan
Scan
Configure the Input Scanner to capture symbol values from source code/binary files and link to an output symbol library.
Below is the default configuration from: scanners/config.yaml.
ewogICJ0eXBlIiA6ICJvYmplY3QiLAogICJwcm9wZXJ0aWVzIiA6IHsKICAgICJ0ZW54IiA6IHsKICAgICAgInR5cGUiIDogInN0cmluZyIKICAgIH0sCiAgICAiaW5wdXRQYXRocyIgOiB7CiAgICAgICJ0eXBlIiA6IFsKICAgICAgICAiYXJyYXkiCiAgICAgIF0sCiAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJJbnB1dCBmb2xkZXJzIHRvIHNjYW5cblxuUHJvdmlkZXMgYSBsaXN0IG9mIGZvbGRlcnMgdGhhdCBhcmUgdHJhdmVyc2VkIGluIHNlYXJjaCBvZiBzb3VyY2UgY29kZSAoZS5nLiAuanMsIC5jcHApLCBiaW5hcnkgKGUuZy4sIC5zbywgLmphciwgLnppcCkgYW5kIHRleHQgKGUuZy4sIC5qc29uLCAueG1sKSBmaWxlcyB0byBjYXB0dXJlIHN5bWJvbCB2YWx1ZXMgZnJvbSBhbmQgb3V0cHV0IHRvIHN5bWJvbCB1bml0IGZpbGVzLiBJbnB1dCBmb2xkZXJzIG1heSBjb250YWluIGZpbGVzIGFuZCBmb2xkZXJzIHB1bGxlZCBmcm9tIFtHaXRIdWJdKGh0dHBzOi8vZG9jLmxvZzEweC5jb20vY29tcGlsZS9wdWxsL2dpdGh1Yi8pIG9yICBhbmQgW0FydGlmYWN0b3J5XShodHRwczovL2RvYy5sb2cxMHguY29tL2NvbXBpbGUvYXJ0aWZhY3RvcnkpLiIsCiAgICAgICJpdGVtcyIgOiB7CiAgICAgICAgInR5cGUiIDogInN0cmluZyIKICAgICAgfQogICAgfSwKICAgICJvdXRwdXRTeW1ib2xGb2xkZXIiIDogewogICAgICAidHlwZSIgOiBbCiAgICAgICAgInN0cmluZyIsCiAgICAgICAgIm51bGwiCiAgICAgIF0sCiAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJMb2NhdGlvbiBvZiBvdXRwdXQgc3ltYm9sIGZvbGRlclxuXG5TcGVjaWZpZXMgdGhlIHJvb3QgZm9sZGVyIGluIHdoaWNoIHRvIHdyaXRlIG91dHB1dCBzeW1ib2wgdW5pdCBmaWxlcy4gVGhpcyBjb21waWxlciBbc2NhbiBwaGFzZV0oaHR0cHM6Ly9kb2MubG9nMTB4LmNvbS9jb21waWxlL3NjYW4vKSBtaXJyb3JzIHRoZSBzdHJ1Y3R1cmUgb2YgdGhlIFtpbnB1dFBhdGhzXShodHRwczovL2RvYy5sb2cxMHguY29tL2NvbXBpbGUvc2Nhbi8jaW5wdXRwYXRocykgYXJndW1lbnQsIHBsYWNpbmcgZWFjaCBvdXRwdXQgc3ltYm9sIHVuaXQgaW4gdGhlIHNhbWUgcmVsYXRpdmUgcGF0aCB1bmRlciBbb3V0cHV0U3ltYm9sRm9sZGVyXShodHRwczovL2RvYy5sb2cxMHguY29tL2NvbXBpbGUvc2Nhbi8jb3V0cHV0c3ltYm9sZm9sZGVyKSBhcyBpdHMgc291cmNlL2JpbmFyeSBpbnB1dCBmaWxlIHVuZGVyIGl0cyByZXNwZWN0aXZlIGBpbnB1dFBhdGhzYCBmb2xkZXIgZW50cnkuICBGb3IgZXhhbXBsZSwgaWYgW2lucHV0UGF0aHNdKGh0dHBzOi8vZG9jLmxvZzEweC5jb20vY29tcGlsZS9zY2FuLyNpbnB1dHBhdGhzKSBpcyBgfi9kZXZgIGFuZCBpdCBjb250YWlucyB0aGUgZmlsZSBgfi9kZXYvYXBwL2Zvby5qc2AsIGFuZCB0aGlzIHZhbHVlIGlzIGB+L3N5bWJvbHNgLCB0aGUgcmVzcGVjdGl2ZSBvdXRwdXQgc3ltYm9sIHVuaXQgZmlsZSBpczogYH4vc3ltYm9scy9hcHAvZm9vLmpzLjEweC5qc29uYC4iCiAgICB9LAogICAgInNjYW4iIDogewogICAgICAidHlwZSIgOiAib2JqZWN0IiwKICAgICAgImFkZGl0aW9uYWxQcm9wZXJ0aWVzIiA6IGZhbHNlLAogICAgICAicHJvcGVydGllcyIgOiB7CiAgICAgICAgImZvcmNlIiA6IHsKICAgICAgICAgICJ0eXBlIiA6IFsKICAgICAgICAgICAgImJvb2xlYW4iLAogICAgICAgICAgICAic3RyaW5nIgogICAgICAgICAgXSwKICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJDb250cm9sIHdoZXRoZXIgdG8gc2NhbiBpbnB1dCBmaWxlcyBldmVuIGlmIGEgbWF0Y2hpbmcgZXhpc3Rpbmcgc3ltYm9sIGZpbGUgZXhpc3RzXG5cbkNvbnRyb2xzIHdoZXRoZXIgdG8gcmV1c2UgbWF0Y2hpbmcgc3ltYm9sIGZpbGVzIHdpdGhpbiBbaW5wdXRQYXRoc10oaHR0cHM6Ly9kb2MubG9nMTB4LmNvbS9jb21waWxlL3NjYW4vI2lucHV0cGF0aHMpLiBUaGlzIG9wdGlvbiBpcyBwcmltYXJpbHkgdXNlZnVsIHdoZW4gZGVidWdnaW5nIGEgbmV3IHNjYW5uZXIgbW9kdWxlIGNvbmZpZ3VyYXRpb24gKGUuZy4sIEFOVExSIGdyYW1tYXIpICBpbiBjb25qdW5jdGlvbiB3aXRoIHRoZSBbc2Nhbm5lciBkZWJ1Z2dpbmddKGh0dHBzOi8vZG9jLmxvZzEweC5jb20vY29tcGlsZS9zY2FuKSBvcHRpb25zLiAoQWNjZXB0cyBib29sZWFuIG9yIHN0cmluZyB3aXRoICQ9IHByZWZpeCBmb3IgcnVudGltZSBldmFsdWF0aW9uKSAoRGVmYXVsdDogZmFsc2UpIiwKICAgICAgICAgICJkZWZhdWx0IiA6IGZhbHNlCiAgICAgICAgfSwKICAgICAgICAiaW5Qcm9jZXNzIiA6IHsKICAgICAgICAgICJ0eXBlIiA6IFsKICAgICAgICAgICAgImJvb2xlYW4iLAogICAgICAgICAgICAic3RyaW5nIgogICAgICAgICAgXSwKICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJDb250cm9scyB3aGV0aGVyIHRvIHNjYW4gc291cmNlL2JpbmFyeSBpbnB1dCBmaWxlcyB1c2luZyBzdWItcHJvY2VzcyhlcylcblxuVGhlIHNjYW5uZXIgY2FuIGxhdW5jaCBbc3VicHJvY2Vzc2VzXShodHRwczovL2RvYy5sb2cxMHguY29tL2NvbXBpbGUvc2Nhbi8jc3VicHJvY2Vzc18xKSB0byBjYXB0dXJlIFtzeW1ib2xdKGh0dHBzOi8vZG9jLmxvZzEweC5jb20vcnVuL3RyYW5zZm9ybS9zdHJ1Y3R1cmUvI3N5bWJvbHMpIGluZm9ybWF0aW9uIGZyb20gc3BlY2lmaWMgdGFyZ2V0IHNvdXJjZS9iaW5hcnkgaW5wdXQgZmlsZXMuICAgR2VuZXJhdGluZyBpbnB1dCBmaWxlIFtBU1RzXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9BYnN0cmFjdF9zeW50YXhfdHJlZSkgdG8gc2NhbiBmb3Igc3ltYm9scyB2YWx1ZXMgZm9yIGNvbXBsZXggc3ludGF4ZXMgY2FuIGJlIGEgbGVuZ3RoeSwgcmVzb3VyY2UtY29uc3VtaW5nIG9wZXJhdGlvbiwgd2hpY2ggaW4gdGhlIGNhc2Ugb2YgIFtBTlRMUiBzeW50YXhlc10oaHR0cHM6Ly90b21hc3NldHRpLm1lL2ltcHJvdmluZy10aGUtcGVyZm9ybWFuY2Utb2YtYW4tYW50bHItcGFyc2VyLykgbWF5IHRpbWVvdXQgb3IgcnVuIG91dCBvZiBtZW1vcnkuICAgICBQcm9jZXNzIFtpc29sYXRpb25dKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1Byb2Nlc3NfaXNvbGF0aW9uKSBhbGxvd3MgZm9yIHRlcm1pbmF0aW5nIHNjYW4gb3BlcmF0aW9ucyB0aGF0IHRpbWVvdXQgZm9yIHNwZWNpZmljIGZpbGVzLCB3aGlsZSBhbGxvd2luZyBvdGhlcnMgdG8gcHJvY2VlZC4gKEFjY2VwdHMgYm9vbGVhbiBvciBzdHJpbmcgd2l0aCAkPSBwcmVmaXggZm9yIHJ1bnRpbWUgZXZhbHVhdGlvbikgKERlZmF1bHQ6IGZhbHNlKSIsCiAgICAgICAgICAiZGVmYXVsdCIgOiBmYWxzZQogICAgICAgIH0sCiAgICAgICAgInRocmVhZFBvb2xTaXplIiA6IHsKICAgICAgICAgICJ0eXBlIiA6IFsKICAgICAgICAgICAgInN0cmluZyIsCiAgICAgICAgICAgICJudWxsIgogICAgICAgICAgXSwKICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJNYXhpbXVtIG51bWJlciBvZiB0aHJlYWRzIHRvIHVzZSBjb25jdXJyZW50bHkgcHJvY2VzcyBpbnB1dCBzb3VyY2UgY29kZSAvYmluYXJ5IGZpbGVzXG5cbkNvbnRyb2xzIHRoZSBtYXhpbXVtIG51bWJlciBvZiB0aHJlYWRzIHRvIHByb2Nlc3MgaW5wdXQgc291cmNlIGNvZGUvYmluYXJ5IGZpbGVzIGNvbmN1cnJlbnRseTogLSBJZiB0aGUgdmFsdWUgaXMgYmV0d2VlbiAwIGFuZCAxLCB0aGUgbnVtYmVyIGNhbGN1bGF0ZXMgYSBwZXJjZW50YWdlIG9mIGF2YWlsYWJsZSBjb3JlcyAoZS5nLiwgMC41ID0gdXNlIHVwIHRvIDUwJSBvZiBhdmFpbGFibGUgY29yZXMpLiAgIC0gSWYgdGhlIHZhbHVlIGlzID49IDEsIHRoZSB2YWx1ZSBzZXRzIGEgZml4ZWQgbnVtYmVyIG9mIHRocmVhZHMgKGUuZy4sIDEwID0gMTAgdGhyZWFkcykuICAgLSBJZiB0aGUgdmFsdWUgaXMgMSwgYWxsb2NhdGUgYSBzaW5nbGUgdGhyZWFkIHRvIHByb2Nlc3MgaW5wdXQgZmlsZXMuIChEZWZhdWx0OiAwLjUpIiwKICAgICAgICAgICJkZWZhdWx0IiA6ICIwLjUiCiAgICAgICAgfSwKICAgICAgICAidW5pdFRpbWVvdXQiIDogewogICAgICAgICAgInR5cGUiIDogWwogICAgICAgICAgICAic3RyaW5nIiwKICAgICAgICAgICAgIm51bGwiCiAgICAgICAgICBdLAogICAgICAgICAgIm1hcmtkb3duRGVzY3JpcHRpb24iIDogIlRpbWVvdXQgaW50ZXJ2YWwgZm9yIHNjYW5uaW5nIGEgc291cmNlIGNvZGUgL2JpbmFyeSBpbnB1dCBmaWxlXG5cblNldHMgdGhlIHRpbWVvdXQgaW50ZXJ2YWwgd2hlbiBzY2FubmluZyBhIHNvdXJjZSBjb2RlIC9iaW5hcnkgaW5wdXQgZmlsZSBiZWZvcmUgZHJvcHBpbmcgaXQuIFNldCB0byBudWxsIHRvIGlnbm9yZS4gKERlZmF1bHQ6IDIwcykiLAogICAgICAgICAgImRlZmF1bHQiIDogIjIwcyIKICAgICAgICB9LAogICAgICAgICJvcGVyYXRpb25UaW1lb3V0IiA6IHsKICAgICAgICAgICJ0eXBlIiA6IFsKICAgICAgICAgICAgInN0cmluZyIsCiAgICAgICAgICAgICJudWxsIgogICAgICAgICAgXSwKICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJUaW1lb3V0IGludGVydmFsIGZvciB0aGUgZW50aXJlIHNjYW5uaW5nIG9wZXJhdGlvblxuXG5TZXRzIHRoZSB0aW1lb3V0IGludGVydmFsIGZvciB0aGUgZW50aXJlIHNjYW5uaW5nIG9wZXJhdGlvbiBiZWZvcmUgdGVybWluYXRpbmcgaXQuIFNldCB0byBudWxsIHRvIGlnbm9yZS4gKERlZmF1bHQ6IDEwbSkiLAogICAgICAgICAgImRlZmF1bHQiIDogIjEwbSIKICAgICAgICB9LAogICAgICAgICJkZWJ1ZyIgOiB7CiAgICAgICAgICAidHlwZSIgOiAib2JqZWN0IiwKICAgICAgICAgICJhZGRpdGlvbmFsUHJvcGVydGllcyIgOiBmYWxzZSwKICAgICAgICAgICJwcm9wZXJ0aWVzIiA6IHsKICAgICAgICAgICAgIm9yaWdpbnMiIDogewogICAgICAgICAgICAgICJ0eXBlIiA6IFsKICAgICAgICAgICAgICAgICJhcnJheSIsCiAgICAgICAgICAgICAgICAibnVsbCIKICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJMaXN0IG9mIGlucHV0IGZpbGUgbmFtZXMgZm9yIHdoaWNoIHRvIGxvZyBpbmZvcm1hdGlvblxuXG5TcGVjaWZpZXMgYSBsaXN0IG9mIGlucHV0IGZpbGUgbmFtZXMgKGUuZy4sIG15LnNjYWxhLCBmb28uamF2YSkgdG8gbG9nIGluZm9ybWF0aW9uIHJlbGF0aW5nIHRvIHdoaWNoIHN5bWJvbHMgd2VyZSBjYXB0dXJlZC9za2lwcGVkLiBTcGVjaWZ5ICcqJyBmb3IgYWxsIGZpbGVzLiIsCiAgICAgICAgICAgICAgIml0ZW1zIiA6IHsKICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJzdHJpbmciCiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICAic3ltYm9scyIgOiB7CiAgICAgICAgICAgICAgInR5cGUiIDogWwogICAgICAgICAgICAgICAgImFycmF5IiwKICAgICAgICAgICAgICAgICJudWxsIgogICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgIm1hcmtkb3duRGVzY3JpcHRpb24iIDogIkxpc3Qgb2Ygbm9kZSB0eXBlcyB3aXRoaW4gYSBzY2FubmVyIEFTVCB0cmVlIGZvciB3aGljaCB0byBsb2cgaW5mb3JtYXRpb25cblxuTGlzdCBvZiBub2RlcyB3aXRoaW4gYW4gaW5wdXQgQVNUIHRyZWUsIHN1Y2ggYXMgY2xhc3MgYW5kIG1ldGhvZCBuYW1lcyhlLmcuLCAnTXlDbGFzcycsICdmb28nKSBmb3Igd2hpY2ggdG8gbG9nIGluZm9ybWF0aW9uIHJlbGF0aW5nIHRvIHRoZSBjb250ZXh0IGluIHdoaWNoIHRoZXkgd2VyZSBjYXB0dXJlZC9za2lwcGVkIGFzIHN5bWJvbHMuICBTcGVjaWZ5ICcqJyBmb3IgYWxsIG5vZGVzLiIsCiAgICAgICAgICAgICAgIml0ZW1zIiA6IHsKICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJzdHJpbmciCiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICAibG9nZ2VyTmFtZSIgOiB7CiAgICAgICAgICAgICAgInR5cGUiIDogWwogICAgICAgICAgICAgICAgInN0cmluZyIsCiAgICAgICAgICAgICAgICAibnVsbCIKICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJEZWJ1ZyBsb2dnZXIgbmFtZVxuXG5TcGVjaWZpZXMgdGhlIGxvZzRqIGxvZ2dlciBmb3IgbG9nZ2luZyB2YWx1ZXMgZm9yIHN5bWJvbHMvZmlsZXMgbWF0Y2hpbmcgJ2RlYnVnT3JpZ2lucycgYW5kICdkZWJ1Z1N5bWJvbHMnLiAoRGVmYXVsdDogW2NvbnNvbGVPdXRdKGh0dHBzOi8vZ2l0aHViLmNvbS9sb2ctMTB4L2NvbmZpZy9ibG9iL21haW4vbG9nNGoyLnlhbWwjTDY2KSkiLAogICAgICAgICAgICAgICJkZWZhdWx0IiA6ICJbY29uc29sZU91dF0oaHR0cHM6Ly9naXRodWIuY29tL2xvZy0xMHgvY29uZmlnL2Jsb2IvbWFpbi9sb2c0ajIueWFtbCNMNjYpIgogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgInByaW50T3V0cHV0IiA6IHsKICAgICAgInR5cGUiIDogWwogICAgICAgICJib29sZWFuIiwKICAgICAgICAic3RyaW5nIgogICAgICBdLAogICAgICAibWFya2Rvd25EZXNjcmlwdGlvbiIgOiAiQ29udHJvbHMgd2hldGhlciB0byBlbWl0IG91dHB1dCBzY2FuIG9wZXJhdGlvbnMgcHJvZ3Jlc3MgdG8gdGhlIGNvbnNvbGVcblxuQ29udHJvbHMgd2hldGhlciBpbmZvcm1hdGlvbiByZWxhdGluZyB0byBzeW1ib2wgdW5pdHMgc2Nhbm5pbmcgaXMgZW1pdHRlZCB0byB0aGUgc3Rkb3V0IHN0cmVhbS4gVGhpcyB2YWx1ZSBzaG91bGQgYmUgc2V0IHRvIHRydWUgd2hlbiB0aGUgY3VycmVudCAxMHggcHJvY2VzcyBpcyAgc3Bhd25lZCBieSBhIHBhcmVudCAxMHggJ2NvbXBpbGUnIHBpcGVsaW5lIHRvIHJlcG9ydCBpdHMgcHJvZ3Jlc3MuIChBY2NlcHRzIGJvb2xlYW4gb3Igc3RyaW5nIHdpdGggJD0gcHJlZml4IGZvciBydW50aW1lIGV2YWx1YXRpb24pIChEZWZhdWx0OiBmYWxzZSkiLAogICAgICAiZGVmYXVsdCIgOiBmYWxzZQogICAgfSwKICAgICJ1bml0c1RvU2NhblBlckJhdGNoIiA6IHsKICAgICAgInR5cGUiIDogWwogICAgICAgICJudW1iZXIiLAogICAgICAgICJzdHJpbmciCiAgICAgIF0sCiAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJNYXhpbXVtIG51bWJlciBvZiBpbnB1dCBmaWxlcyB0byBzY2FuIHBlciBzdWItcHJvY2Vzcy5cblxuU2V0cyB0aGUgbWF4aW11bSBudW1iZXIgb2Ygc291cmNlL2JpbmFyeSBpbnB1dCBmaWxlcyB0byBzY2FuIGJ5IGEgc2luZ2xlICdjb21waWxlJyBzdWItcHJvY2Vzcy4gU2V0IHRvIDAgdG8gdW5saW1pdGVkLiAoQWNjZXB0cyBudW1iZXIgb3Igc3RyaW5nIHdpdGggJD0gcHJlZml4IGZvciBydW50aW1lIGV2YWx1YXRpb24pIChEZWZhdWx0OiA0MCkiLAogICAgICAiZGVmYXVsdCIgOiA0MAogICAgfSwKICAgICJ0b2tlbkRlbGltcyIgOiB7CiAgICAgICJ0eXBlIiA6IFsKICAgICAgICAic3RyaW5nIiwKICAgICAgICAibnVsbCIKICAgICAgXSwKICAgICAgIm1hcmtkb3duRGVzY3JpcHRpb24iIDogIlRva2VuIGRlbGltaXRlcnNcblxuRGVmaW5lcyB3aGljaCBjaGFyYWN0ZXJzIGJyZWFrIGEgc3RyaW5nIG9mIGV2ZW50IGNoYXJhY3RlcnMgaW50byB0b2tlbnMgdG8gY2xhc3NpZnkgYXMgc3ltYm9scyBvciB2YXJpYWJsZXMuIChEZWZhdWx0OiA8PnwuIF1bOi0rLyo9XFxcXCx7fV8oKTsnXFxcIiRcXHRcXG5AKSIsCiAgICAgICJkZWZhdWx0IiA6ICI8PnwuIF1bOi0rLyo9XFxcXCx7fV8oKTsnXFxcIiRcXHRcXG5AIgogICAgfSwKICAgICJmaWxlRXh0U3RyaW5nRm9ybWF0cyIgOiB7CiAgICAgICJ0eXBlIiA6IFsKICAgICAgICAiYXJyYXkiLAogICAgICAgICJudWxsIgogICAgICBdLAogICAgICAibWFya2Rvd25EZXNjcmlwdGlvbiIgOiAiU3RyaW5nIGZvcm1hdCBzcGVjaWZpZXIgY2hhcmFjdGVyc1xuXG5Db250cm9scyB3aGljaCBjaGFyYWN0ZXJzIGlkZW50aWZ5IHRoZSBzdGFydCBvZiBhIFtmb3JtYXQgc3BlY2lmaWVyXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9QcmludGYjRm9ybWF0X3NwZWNpZmllcikgZm9yIGVhY2ggcHJvZ3JhbW1pbmcgbGFuZ3VhZ2UgZXh0ZW5zaW9uIGluIHRoZSBmb3JtIG9mIDxleHQ+Ojxmb3JtYXRQcmVmaXg+IChlLmcuLCBgLmphdmE6JWApLiAgSXQgaXMgYSBzdGFuZGFyZCBwcm9ncmFtbWluZyBwcmFjdGljZSB0byB1c2Ugc3RyaW5nIGZvcm1hdHMgdG8gbG9nIG1lc3NhZ2VzIGluIHRoZSBmb3JtIG9mOiAgYGBgIGphdmEgbG9nLmVycm9yKFwiY291bGQgbm90IGNvbm5lY3QgdG8ge30gd2l0aCBzdGF0dXMge31cIiwgaG9zdCwgc3RhdHVzKTsgYGBgICBXaGVuIGFuIFRlblhUZW1wbGF0ZSB0b2tlbml6ZXIgcHJvY2Vzc2luZyBhbiBldmVudCBpZGVudGlmaWVzIGEgZm9ybWF0IHByZWZpeCAoZS5nLiwgYCVgKSBpdCBza2lwcyBpdCBhbmQgYXBwZW5kcyBzdWJzZXF1ZW50IHN5bWJvbCB0b2tlbnMgKGUuZy4sIGB3aXRoIHN0YXR1c2ApIHRvIHRoZSBzeW1ib2wgc2VxdWVuY2UgcHJlY2VkaW5nIHRoZW0gKGUuZy4sIGBjb3VsZCBub3QgY29ubmVjdCB0b2ApLiIsCiAgICAgICJpdGVtcyIgOiB7CiAgICAgICAgInR5cGUiIDogInN0cmluZyIKICAgICAgfQogICAgfSwKICAgICJtYXhTeW1ib2wiIDogewogICAgICAidHlwZSIgOiAib2JqZWN0IiwKICAgICAgImFkZGl0aW9uYWxQcm9wZXJ0aWVzIiA6IGZhbHNlLAogICAgICAicHJvcGVydGllcyIgOiB7CiAgICAgICAgInVuaXRTZWN0aW9uU2l6ZSIgOiB7CiAgICAgICAgICAidHlwZSIgOiBbCiAgICAgICAgICAgICJudW1iZXIiLAogICAgICAgICAgICAic3RyaW5nIgogICAgICAgICAgXSwKICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJNYXhpbXVtIG51bWJlciBvZiBzeW1ib2wgdG9rZW5zIHRvIHN0b3JlIGluIGEgc2luZ2xlIHN5bWJvbCB1bml0IGZpbGVcblxuQ29udHJvbHMgdGhlIG1heGltdW0gbnVtYmVyIG9mIHN5bWJvbCB0b2tlbnMgdG8gc3RvcmUgaW4gYSBzeW1ib2wgdW5pdCBiZWZvcmUgc3BsaXR0aW5nIGl0LiBUaGlzIG9wdGlvbiBzdXBwb3J0cyBsYXJnZSBzb3VyY2UgY29kZSAvYmluYXJ5IGlucHV0IGZpbGVzIHRoYXQgbWF5IGhhdmUgdGhvdXNhbmRzIG9mIHRleHQgc3ltYm9scyB0byBhdm9pZCAgY3JlYXRpbmcgc2l6ZWFibGUgaW5kaXZpZHVhbCBzeW1ib2wgdW5pdCBmaWxlcy4gICAgICAgICBTZXQgdG8gbnVsbCB0byBpZ25vcmUuIChBY2NlcHRzIG51bWJlciBvciBzdHJpbmcgd2l0aCAkPSBwcmVmaXggZm9yIHJ1bnRpbWUgZXZhbHVhdGlvbikgKERlZmF1bHQ6IDUwMCkiLAogICAgICAgICAgImRlZmF1bHQiIDogNTAwCiAgICAgICAgfSwKICAgICAgICAidW5pdHNQZXJUb2tlbiIgOiB7CiAgICAgICAgICAidHlwZSIgOiBbCiAgICAgICAgICAgICJudW1iZXIiLAogICAgICAgICAgICAic3RyaW5nIgogICAgICAgICAgXSwKICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJOdW1iZXIgb2Ygc3ltYm9sIHVuaXRzIHRvIHJldHJpZXZlIHdoZW4gc2VhcmNoaW5nIGZvciB0aGUgb3JpZ2luIG9mIGFuIFRlblhUZW1wbGF0ZSBzeW1ib2wgc2VxdWVuY2VcblxuQ29udHJvbHMgdGhlIG1heGltdW0gbnVtYmVyIG9mIHN5bWJvbCB1bml0cyB0byBsb2FkIGZyb20gdGhlIHBpcGVsaW5lJ3Mgc3ltYm9sIGxpYnJhcnkgd2hlbiBzZWFyY2hpbmcgZm9yIHRoZSBvcmlnaW4gb2YgYSBzcGVjaWZpYyBbVGVuWFRlbXBsYXRlXShodHRwczovL2RvYy5sb2cxMHguY29tL3J1bi90ZW1wbGF0ZS8pIHN5bWJvbC4gICBUaGUgW3N5bWJvbFNlcXVlbmNlXShodHRwczovL2RvYy5sb2cxMHguY29tL2FwaS9qcy8jVGVuWE9iamVjdCtzeW1ib2xTZXF1ZW5jZSkgZnVuY3Rpb24gcXVlcmllcyB0aGUgc291cmNlIGNvZGUvYmluYXJ5IG9yaWdpbiBvZiBzeW1ib2wgc2VxdWVuY2VzIGluIGEgdGFyZ2V0IFRlblhUZW1wbGF0ZSB0byBpZGVudGlmeSB0aGUgbG9naWNhbCBbbWVzc2FnZV0oaHR0cHM6Ly9kb2MubG9nMTB4LmNvbS9ydW4vaW5pdGlhbGl6ZS9tZXNzYWdlLykgcG9ydGlvbiBvZiBhIHRhcmdldCBhcHAvaW5mcmEgZXZlbnRzIHZzLiB2YXJpYWJsZSBhbmQgY29udGV4dCBpbmZvcm1hdGlvbiAoZS5nLiwgdXNlciwgaG9zdCwgc2V2ZXJpdHkpLiAgIFNpbmNlIGEgW3N5bWJvbF0oaHR0cHM6Ly9kb2MubG9nMTB4LmNvbS9ydW4vdHJhbnNmb3JtL3N0cnVjdHVyZS8jc3ltYm9scykgdmFsdWUgbWF5IGFwcGVhciBpbiBodW5kcmVkcyBvciBtb3JlIGxvY2F0aW9ucyBhY3Jvc3MgYSBjb2RlIGJhc2UsICBsaW1pdGluZyB0aGUgbnVtYmVyIG9mIHN5bWJvbCB1bml0cyB0byBsb2FkIGlzIG5lY2Vzc2FyeSB0byByZWR1Y2UgbWVtb3J5IGNvbnN1bXB0aW9uLiAgIEEgc2Vjb25kIGNvbnNpZGVyYXRpb24gaXMgcGxhY2luZyBhbiB1cHBlciBsaW1pdCBvbiB0aGUgbnVtYmVyIG9mIHVuaXRzIHRvIGxvYWQgZnJvbSB0aGUgc3ltYm9sIGxpYnJhcnksICB3aGljaCBpcyB0aGUgbW9yZSBmcmVxdWVudCBhIHN5bWJvbCBpcywgdGhlIGxvd2VyIHRoZSBwcm9iYWJpbGl0eSBvZiBzZWxlY3RpbmcgdGhlIGNvcnJlY3Qgb3JpZ2luLiAoQWNjZXB0cyBudW1iZXIgb3Igc3RyaW5nIHdpdGggJD0gcHJlZml4IGZvciBydW50aW1lIGV2YWx1YXRpb24pIChEZWZhdWx0OiAxMjgpIiwKICAgICAgICAgICJkZWZhdWx0IiA6IDEyOAogICAgICAgIH0KICAgICAgfQogICAgfQogIH0sCiAgInJlcXVpcmVkIiA6IFsKICAgICJpbnB1dFBhdGhzIgogIF0sCiAgImFkZGl0aW9uYWxQcm9wZXJ0aWVzIiA6IGZhbHNlCn0=
# 🔟❎ 'compile' symbol scanner config
# Configure input and output options for the compile pipeline.
# To learn more see https://doc.log10x.com/compile/scan
tenx: compile
# ========================== Configure I/O Paths ==============================
# 'inputPaths' lists folders on disk containing source code and binary files to scan.
# To learn more see https://doc.log10x.com/compile/scan/#inputpaths
inputPaths:
- $=path("data/compile/sources", "") # Default to none ("") if source folder not found
# - <path-to-input-files> # uncomment to specify additional input paths
# 'outputSymbolFolder' specifies the folder for output symbol unit files.
# To learn more see https://doc.log10x.com/compile/scan/#outputsymbolfolder
outputSymbolFolder: $=TenXEnv.get("TENX_OUTPUT_SYMBOL_FOLDER", path("data/shared/symbols", "<tenx.io.tmpdir>")) # Default to 10x temp dir
Link
Link
Configure the Symbol library linker to link symbol unit files to an output symbol library file.
Below is the default configuration from: link/config.yaml.
ewogICJ0eXBlIiA6ICJvYmplY3QiLAogICJwcm9wZXJ0aWVzIiA6IHsKICAgICJ0ZW54IiA6IHsKICAgICAgInR5cGUiIDogInN0cmluZyIKICAgIH0sCiAgICAib3V0cHV0U3ltYm9sTGlicmFyeUZpbGUiIDogewogICAgICAidHlwZSIgOiBbCiAgICAgICAgInN0cmluZyIsCiAgICAgICAgIm51bGwiCiAgICAgIF0sCiAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJMb2NhdGlvbiBvZiBvdXRwdXQgc3ltYm9sIGxpYnJhcnkgZmlsZVxuXG5TcGVjaWZpZXMgYW4gb3V0cHV0IHN5bWJvbCBsaWJyYXJ5IGZpbGUgbWVyZ2luZyB0aGUgc3ltYm9sIHVuaXQgZmlsZXMgcHJvZHVjZWQgZm9yIFtpbnB1dFBhdGhzXShodHRwczovL2RvYy5sb2cxMHguY29tL2NvbXBpbGUvc2Nhbi8jaW5wdXRwYXRocykuIFRoZSBzeW1ib2wgbGlicmFyeSBmaWxlIHByb3ZpZGVzIGEgc2luZ2xlIGFydGlmYWN0IHRvIHNldCBhcyB0aGUgW3N5bWJvbFBhdGhzXShodHRwczovL2RvYy5sb2cxMHguY29tL3J1bi9zeW1ib2wvI3N5bWJvbHBhdGhzKSBhdCBydW4gdGltZS4iCiAgICB9LAogICAgIm1heFN5bWJvbFVuaXRGaWxlU2l6ZSIgOiB7CiAgICAgICJ0eXBlIiA6IFsKICAgICAgICAic3RyaW5nIiwKICAgICAgICAibnVsbCIKICAgICAgXSwKICAgICAgIm1hcmtkb3duRGVzY3JpcHRpb24iIDogIk1heCBmaWxlIHNpemUgZm9yICdvdXRwdXRTeW1ib2xMaWJyYXJ5RmlsZScgYmVmb3JlIGl0IGlzIHNwbGl0IGludG8gY2h1bmtzXG5cblNldHMgdGhlIG1heGltdW0gZmlsZSBzaXplIChlLmcuLCA0ME1CKSBmb3IgW291dHB1dFN5bWJvbExpYnJhcnlGaWxlXShodHRwczovL2RvYy5sb2cxMHguY29tL2NvbXBpbGUvbGluay8jb3V0cHV0c3ltYm9sbGlicmFyeWZpbGUpIGJlZm9yZSBzcGxpdHRpbmcgaW50byBjaHVua3MsIGVhY2ggd2VpZ2hpbmcgbm8gbW9yZSB0aGFuIHRoaXMgdmFsdWUuIFRoaXMgb3B0aW9uIGVuYWJsZXMgbGFyZ2UgIGFydGlmYWN0cyB0byByZW1haW4gW0dpdEh1YiBjb21taXR0YWJsZV0oaHR0cHM6Ly9kb2NzLmdpdGh1Yi5jb20vZW4vcmVwb3NpdG9yaWVzL3dvcmtpbmctd2l0aC1maWxlcy9tYW5hZ2luZy1sYXJnZS1maWxlcy9hYm91dC1sYXJnZS1maWxlcy1vbi1naXRodWIpLiAoRGVmYXVsdDogNDBNQikiLAogICAgICAiZGVmYXVsdCIgOiAiNDBNQiIKICAgIH0sCiAgICAic3ltYm9sIiA6IHsKICAgICAgInR5cGUiIDogIm9iamVjdCIsCiAgICAgICJhZGRpdGlvbmFsUHJvcGVydGllcyIgOiBmYWxzZSwKICAgICAgInByb3BlcnRpZXMiIDogewogICAgICAgICJ0eXBlcyIgOiB7CiAgICAgICAgICAidHlwZSIgOiBbCiAgICAgICAgICAgICJhcnJheSIsCiAgICAgICAgICAgICJudWxsIgogICAgICAgICAgXSwKICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJUb2tlbiB0eXBlcyByZWFkIGZyb20gaW5wdXQgc291cmNlL2JpbmFyeSBmaWxlcyB3cml0dGVuIHRvIG91dHB1dFxuXG5GaWx0ZXIgc3ltYm9sIHZhbHVlcyB0byB3cml0ZSB0byBbb3V0cHV0U3ltYm9sTGlicmFyeUZpbGVdKGh0dHBzOi8vZG9jLmxvZzEweC5jb20vY29tcGlsZS9saW5rLyNvdXRwdXRzeW1ib2xsaWJyYXJ5ZmlsZSkgYmFzZWQgb24gdGhlaXIgW2NvbnRleHRdKGh0dHBzOi8vZG9jLmxvZzEweC5jb20vcnVuL3RyYW5zZm9ybS9zeW1ib2wvI2NvbnRleHRzKS4gVGhpcyBvcHRpb24gcmVkdWNlcyB0aGUgc2l6ZSBvZiB0aGUgb3V0cHV0IHN5bWJvbCBsaWJyYXJ5IGZpbGUgYnkgb21pdHRpbmcgc3ltYm9sIHR5cGVzIG5vdCByZXF1aXJlZCBhdCBydW4gdGltZS4gIEZvciBwb3NzaWJsZSB2YWx1ZXMsIHNlZTogW2NvbnRleHRzXShodHRwczovL2RvYy5sb2cxMHguY29tL3J1bi90cmFuc2Zvcm0vc3ltYm9sLyNjb250ZXh0cykuIChEZWZhdWx0OiBbXCJwYWNrYWdlXCIsXCJjbGFzc1wiLFwiZW51bVwiLFwibG9nXCIsXCJ0ZXh0XCIsXCJleGVjXCJdKSIsCiAgICAgICAgICAiaXRlbXMiIDogewogICAgICAgICAgICAidHlwZSIgOiAic3RyaW5nIgogICAgICAgICAgfSwKICAgICAgICAgICJkZWZhdWx0IiA6IFsKICAgICAgICAgICAgInBhY2thZ2UiLAogICAgICAgICAgICAiY2xhc3MiLAogICAgICAgICAgICAiZW51bSIsCiAgICAgICAgICAgICJsb2ciLAogICAgICAgICAgICAidGV4dCIsCiAgICAgICAgICAgICJleGVjIgogICAgICAgICAgXQogICAgICAgIH0sCiAgICAgICAgImZpbGVOYW1lRmlsdGVycyIgOiB7CiAgICAgICAgICAidHlwZSIgOiBbCiAgICAgICAgICAgICJhcnJheSIsCiAgICAgICAgICAgICJudWxsIgogICAgICAgICAgXSwKICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJSZWdleCBwYXR0ZXJucyB0byBleGNsdWRlIHN5bWJvbCBmaWxlcyBmcm9tIG91dHB1dCBzeW1ib2wgbGlicmFyeVxuXG5GaWx0ZXJzIHN5bWJvbCBmaWxlcyB0byBleGNsdWRlIGZyb20gW291dHB1dFN5bWJvbExpYnJhcnlGaWxlXShodHRwczovL2RvYy5sb2cxMHguY29tL2NvbXBpbGUvbGluay8jb3V0cHV0c3ltYm9sbGlicmFyeWZpbGUpIHVzaW5nIHJlZ2V4IHBhdHRlcm5zLiBUaGlzIG9wdGlvbiBpcyB0eXBpY2FsbHkgdXNlZCB0byBleGNsdWRlIHRlc3QgZmlsZXMgZnJvbSB0aGUgc3ltYm9sIGxpYnJhcnksIHJlZHVjaW5nIG91dHB1dCBzaXplIGFuZCBmb2N1c2luZyBvbiBwcm9kdWN0aW9uIGNvZGUgc3ltYm9scy4gIENvbW1vbiBwYXR0ZXJucyBmb3IgZXhjbHVkaW5nIHRlc3QgZmlsZXMgYWNyb3NzIGxhbmd1YWdlczogLSBKYXZhOiBgXi4qKFRlc3R8VGVzdHN8VGVzdENhc2UpXFwuamF2YSRgIChKVW5pdC9UZXN0TkcgdGVzdCBmaWxlcykgLSBKYXZhU2NyaXB0L1R5cGVTY3JpcHQ6IGBeLipcXC4odGVzdHxzcGVjKVxcLihqc3xqc3h8dHN8dHN4fG1qc3xjanMpJGAgKEplc3QvTW9jaGEvVml0ZXN0IHRlc3QgZmlsZXMpIC0gUHl0aG9uOiBgXnRlc3RfLitcXC5weSRgIG9yIGBeLitfdGVzdFxcLnB5JGAgKHB5dGVzdC91bml0dGVzdCB0ZXN0IGZpbGVzKSAtIFNjYWxhOiBgXi4qKFNwZWN8VGVzdClcXC5zY2FsYSRgIChTY2FsYVRlc3QvU3BlY3MyIHRlc3QgZmlsZXMpIC0gQyM6IGBeLiooVGVzdHxUZXN0cylcXC5jcyRgICh4VW5pdC9OVW5pdC9NU1Rlc3QgdGVzdCBmaWxlcykgLSBHbzogYF4uKl90ZXN0XFwuZ28kYCAoYnVpbHQtaW4gdGVzdGluZyBmcmFtZXdvcmsgdGVzdCBmaWxlcykgLSBDKys6IGBeLiooX3Rlc3R8VGVzdClzP1xcLihjcHB8Y2N8Y3h4fGhwcHxofGh4eCkkYCAoR29vZ2xlVGVzdC9DYXRjaDIvQm9vc3QuVGVzdCB0ZXN0IGZpbGVzKSIsCiAgICAgICAgICAiaXRlbXMiIDogewogICAgICAgICAgICAidHlwZSIgOiAic3RyaW5nIgogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgImZvbGRlckZpbHRlcnMiIDogewogICAgICAgICAgInR5cGUiIDogWwogICAgICAgICAgICAiYXJyYXkiLAogICAgICAgICAgICAibnVsbCIKICAgICAgICAgIF0sCiAgICAgICAgICAibWFya2Rvd25EZXNjcmlwdGlvbiIgOiAiUGF0dGVybnMgdG8gZXhjbHVkZSBzeW1ib2wgZmlsZXMgYnkgZm9sZGVyIGZyb20gb3V0cHV0IHN5bWJvbCBsaWJyYXJ5XG5cbkZpbHRlcnMgc3ltYm9sIGZpbGVzIHRvIGV4Y2x1ZGUgZnJvbSBbb3V0cHV0U3ltYm9sTGlicmFyeUZpbGVdKGh0dHBzOi8vZG9jLmxvZzEweC5jb20vY29tcGlsZS9saW5rLyNvdXRwdXRzeW1ib2xsaWJyYXJ5ZmlsZSkgYmFzZWQgb24gZm9sZGVyIGxvY2F0aW9uLiBUaGlzIG9wdGlvbiBjb21wbGVtZW50cyBbc3ltYm9sRmlsZU5hbWVGaWx0ZXJzXShodHRwczovL2RvYy5sb2cxMHguY29tL2NvbXBpbGUvbGluay8jc3ltYm9sZmlsZW5hbWVmaWx0ZXJzKSBieSBleGNsdWRpbmcgZmlsZXMgYmFzZWQgb24gdGhlaXIgY29udGFpbmluZyBmb2xkZXIuICAqKlBsYWluIGZvbGRlciBuYW1lKiogKGUuZy4sIGB0ZXN0YCkgLSBtYXRjaGVzIHdoZW4gdGhlIGZpbGUncyBkaXJlY3QgcGFyZW50IGZvbGRlciBoYXMgdGhpcyBuYW1lLiBPbmx5IGFscGhhbnVtZXJpYyBjaGFyYWN0ZXJzLCB1bmRlcnNjb3JlcywgYW5kIGh5cGhlbnMgYXJlIHRyZWF0ZWQgYXMgcGxhaW4gbmFtZXMuICAqKlJlZ2V4IHBhdHRlcm4qKiAoYW55dGhpbmcgZWxzZSkgLSBtYXRjaGVkIGFnYWluc3QgdGhlIGZ1bGwgZmlsZSBwYXRoIChjYXNlLWluc2Vuc2l0aXZlKS4gVXNlIGBbL1xcXFxdYCBmb3IgY3Jvc3MtcGxhdGZvcm0gcGF0aCBzZXBhcmF0b3JzIChVbml4IGAvYCBhbmQgV2luZG93cyBgXFxgKS4gICoqRXhhbXBsZXM6KiogLSBgdGVzdGAgLSBGaWxlcyBkaXJlY3RseSBpbnNpZGUgYSBgdGVzdGAgZm9sZGVyIC0gYF9fdGVzdHNfX2AgLSBGaWxlcyBkaXJlY3RseSBpbnNpZGUgYF9fdGVzdHNfX2AgKEplc3QgY29udmVudGlvbikgLSBgWy9cXFxcXXZlbmRvclsvXFxcXF1gIC0gRmlsZXMgYW55d2hlcmUgdW5kZXIgYSBgdmVuZG9yYCBmb2xkZXIgKEdvIHZlbmRvcmVkIGRlcHMpIC0gYFsvXFxcXF1ub2RlX21vZHVsZXNbL1xcXFxdYCAtIEZpbGVzIGFueXdoZXJlIHVuZGVyIGBub2RlX21vZHVsZXNgIiwKICAgICAgICAgICJpdGVtcyIgOiB7CiAgICAgICAgICAgICJ0eXBlIiA6ICJzdHJpbmciCiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgfSwKICAiYWRkaXRpb25hbFByb3BlcnRpZXMiIDogZmFsc2UKfQ==
# 🔟❎ 'compile' merge configuration
# Combine symbol units into a single output symbol library file.
# To learn more see https://doc.log10x.com/compile/link/
# Set the 10x pipeline to 'compile'
tenx: compile
# ============================ Symbol Library Output ==========================
# 'outputSymbolLibraryFile' specifies location of output symbol library file which
# links the contents of 'outputSymbolFolder' to a single .json artifact and a
# compressed .zip version for use at run time by 10x 'run' pipelines.
# If a local output dir exists write to it, otherwise use the pipeline's temp folder.
# To learn more see https://doc.log10x.com/compile/link
outputSymbolLibraryFile: $=TenXEnv.get("TENX_OUTPUT_SYMBOL_LIBRARY_FILE", path("data/shared/symbols", "<tenx.io.tmpdir>") + "/" + TenXEnv.get("runtimeName", "symbols") + ".10x.tar")
# ============================ Symbol Filter options ==========================
# The options below control which symbol files and values are merged into 'outputSymbolLibraryFile'
symbol:
# 'fileNameFilters' — exclude test files from symbol library
fileNameFilters:
# ── Java ───────────────────────────────────────
- ^.*(Test|Tests|TestCase|TestSuite)\.java$ # *Test.java, *TestCase.java, *TestSuite.java
- ^Test.*\.java$ # TestFoo.java (legacy)
# ── JavaScript / TypeScript ────────────────────
- ^.*\.(test|spec)\.(js|jsx|ts|tsx|mjs|cjs)$ # *.test.js, *.spec.tsx
# ── Python ─────────────────────────────────────
- ^test_.+\.py$ # test_utils.py
- ^.+_test\.py$ # utils_test.py
- ^test(s|case|cases|suite|suites)?\.py$ # test.py, tests.py, testcase.py, testcases.py, testsuite.py
# ── Scala ──────────────────────────────────────
- ^.*(Spec|Test|Suite)\.scala$ # *Spec.scala, *Test.scala, *Suite.scala
# ── C# ─────────────────────────────────────────
- ^.*(Test|Tests|TestCase|TestSuite)\.cs$ # *Test.cs, *TestCase.cs, *TestSuite.cs
# ── Go ─────────────────────────────────────────
- ^.*_test\.go$ # *_test.go
# Note: testdata.go is usually a data file, not test code → not filtered here
# ── C++ ───────────────────────────────────────
- ^.*(_test|Test|Tests)s?\.(cpp|cc|cxx|hpp|h|hxx)$ # *_test.cpp, *Test.hpp, *Tests.cpp
# 'folderFilters' — patterns to exclude files by folder
# Plain name (e.g., "test") → matches direct parent folder only
# Regex (e.g., "[/\\]vendor[/\\]") → matches anywhere in full path
folderFilters:
- test # direct parent is "test"
- tests # direct parent is "tests"
- __tests__ # Jest convention
- spec # RSpec/Jasmine convention
- specs # RSpec/Jasmine convention
- unit # unit test folder
- integration # integration test folder
- e2e # e2e tests (Cypress, Playwright)
- end-to-end # alternate e2e naming
- acceptance # acceptance test folder
- testdata # Go test data folder
- fixtures # test fixtures folder
- mocks # mock implementations folder
- "[/\\\\]vendor[/\\\\][a-z]+\\.[a-z]" # Go vendored deps (vendor/domain.tld pattern)
# 'types' controls the types of symbols written into 'outputSymbolLibraryFile'
# for reflective use at runtime.
# Narrowing the this list reduces the size of the output 10x symbols file. Possible values:
types:
- class # source code class/interface name (e.g. 'AcmeLogic')
- enum # source code enum/literal name (e.g. 'severity: {error,warn,debug}')
- log # source code print format passed to a logging method/stream (e.g. 'err("could not connect to %s",..');
- exec # string value extracted from a binary executable input file (e.g. via 'strings' nix command)
# - method # code method/function name (e.g. 'foo')
# - const # string constant assigned into a variable or method arg (e.g. 'greeting = "hello world"')
# - text # string value, usually read from a config file (e.g. JSON/XML/YAML field name)
# - package # source code package/namespace/module name (e.g. 'com.acme.core')
Push
Push
Configure GitHub push committers to push output symbol unit files to GitHub.
Below is the default configuration from: push/config.yaml (* Required Fields).
ewogICJ0eXBlIiA6ICJvYmplY3QiLAogICJwcm9wZXJ0aWVzIiA6IHsKICAgICJ0ZW54IiA6IHsKICAgICAgInR5cGUiIDogInN0cmluZyIKICAgIH0sCiAgICAiZ2l0aHViUHVzaCIgOiB7CiAgICAgICJ0eXBlIiA6ICJhcnJheSIsCiAgICAgICJpdGVtcyIgOiB7CiAgICAgICAgInR5cGUiIDogIm9iamVjdCIsCiAgICAgICAgImFkZGl0aW9uYWxQcm9wZXJ0aWVzIiA6IGZhbHNlLAogICAgICAgICJwcm9wZXJ0aWVzIiA6IHsKICAgICAgICAgICJyZXBvIiA6IHsKICAgICAgICAgICAgInR5cGUiIDogWwogICAgICAgICAgICAgICJzdHJpbmciLAogICAgICAgICAgICAgICJudWxsIgogICAgICAgICAgICBdLAogICAgICAgICAgICAibWFya2Rvd25EZXNjcmlwdGlvbiIgOiAiVGFyZ2V0IEdpdEh1YiByZXBvXG5cbklkZW50aWZpZXMgYSBHaXRIdWIgcmVwb3NpdG9yeSB0byBwdXNoIGZpbGVzIHRvIGluY2x1ZGluZyB0aGUgdXNlcm5hbWUgb2YgdGhlIG93bmVyIChlLmcuLCAnc29tZS11c2VyL3JlcG8tbmFtZScpIgogICAgICAgICAgfSwKICAgICAgICAgICJ0b2tlbiIgOiB7CiAgICAgICAgICAgICJ0eXBlIiA6IFsKICAgICAgICAgICAgICAic3RyaW5nIiwKICAgICAgICAgICAgICAibnVsbCIKICAgICAgICAgICAgXSwKICAgICAgICAgICAgIm1hcmtkb3duRGVzY3JpcHRpb24iIDogIkdpdEh1YiBBUEkgYWNjZXNzIHRva2VuXG5cbkRlZmluZXMgYW4gYWNjZXNzIHRva2VuIGZvciBhY2Nlc3NpbmcgR2l0aHViIHJlcG9zLiBUbyBsZWFybiBtb3JlIHNlZSBbR2l0SHViIHRva2Vuc10oaHR0cHM6Ly9kb2NzLmdpdGh1Yi5jb20vZW4vYXV0aGVudGljYXRpb24va2VlcGluZy15b3VyLWFjY291bnQtYW5kLWRhdGEtc2VjdXJlL21hbmFnaW5nLXlvdXItcGVyc29uYWwtYWNjZXNzLXRva2VucykuIgogICAgICAgICAgfSwKICAgICAgICAgICJicmFuY2giIDogewogICAgICAgICAgICAidHlwZSIgOiBbCiAgICAgICAgICAgICAgInN0cmluZyIsCiAgICAgICAgICAgICAgIm51bGwiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJUYXJnZXQgYnJhbmNoIHRvIHB1c2ggdG9cblxuU3BlY2lmaWVzIHRoZSBicmFuY2ggdG8gdXNlIHdoZW4gcHVzaGluZyB0byB0aGlzIHJlcG8uIElmIG9taXR0ZWQsIHVzZSB0aGUgcmVwb3NpdG9yeSdzIGRlZmF1bHQgYnJhbmNoLiIKICAgICAgICAgIH0sCiAgICAgICAgICAiZm9sZGVyIiA6IHsKICAgICAgICAgICAgInR5cGUiIDogWwogICAgICAgICAgICAgICJzdHJpbmciLAogICAgICAgICAgICAgICJudWxsIgogICAgICAgICAgICBdLAogICAgICAgICAgICAibWFya2Rvd25EZXNjcmlwdGlvbiIgOiAiRm9sZGVyIHdpdGhpbiB0aGUgdGFyZ2V0IEdpdEh1YiByZXBvIGluIHdoaWNoIHRvIHB1c2ggZmlsZXNcblxuSWRlbnRpZmllcyBhIGZvbGRlciB3aXRoaW4gdGhlIHRhcmdldCBHaXRIdWIgcmVwbyB0byBwdXNoIG91dHB1dCBzeW1ib2wgZmlsZXMgdG8iCiAgICAgICAgICB9LAogICAgICAgICAgImZpbHRlciIgOiB7CiAgICAgICAgICAgICJ0eXBlIiA6IFsKICAgICAgICAgICAgICAic3RyaW5nIiwKICAgICAgICAgICAgICAibnVsbCIKICAgICAgICAgICAgXSwKICAgICAgICAgICAgIm1hcmtkb3duRGVzY3JpcHRpb24iIDogIkEgcmVnZXggcGF0dGVybiBhIGZpbGUgb24gZGlzayBtdXN0IG1hdGNoIHRvIHB1c2hcblxuU3BlY2lmaWVzIGEgYSByZWdleCBwYXR0ZXJuIGEgZmlsZSBvbiBkaXNrIG11c3QgbWF0Y2ggdG8gYmUgcHVzaGVkIHRvIHRoZSB0YXJnZXQgcmVwby4gVGhpcyBvcHRpb24gcHJvdmlkZXMgYSBtZWNoYW5pc20gZm9yICdyb3V0aW5nJyBvdXRwdXQgc3ltYm9sIGZpbGVzIHRvIGRpZmZlcmVudCByZXBvc2l0b3JpZXMgYmFzZWQgb24gdGhlaXIgZmlsZSBleHRlbnNpb24gKGUuZy4sIGBcXC5qc1xcLmpzb24kYCkgb3IgbG9jYXRpb24gd2l0aGluIHRoZSBvdXRwdXQgZm9sZGVyIHRyZWUgKGUuZy4sIGAoXnwvfFxcXFwpYWNtZSgvfFxcXFx8JGApIgogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgInJlcXVpcmVkIiA6IFsKICAgICAgICAgICJyZXBvIgogICAgICAgIF0KICAgICAgfQogICAgfQogIH0sCiAgImFkZGl0aW9uYWxQcm9wZXJ0aWVzIiA6IGZhbHNlCn0=
# 🔟❎ 'compile' GitHub configuration
# Push output symbol unit files for reuse by subsequent compile cycles.
# To learn more see https://doc.log10x.com/compile/push/
# Set the 10x pipeline to 'compile'
tenx: compile
# =============================== GitHub Options ==============================
githubPush:
# 'token' specifies the access token for pushing files to the target repo, read from env or set inline.
# To learn more see: https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens
- token: $=TenXEnv.get("GH_TOKEN") # (❗ EnvVar REQUIRED)
# 'repo' specifies the repo name to pull in Github
# including the username of the owner (e.g., apache/spark)
repo: null # (❗ REQUIRED)
# 'branch' specifies the branch to use when pushing into this repo.
# If not specified, push to the default repo branch
branch: null
# 'folder' specifies a folder within the target repo to push files, if not specified push to root
folder: null
# 'filter' specifies a a regex pattern a file on disk must match to be pushed to the target repo.
filter: null
Advanced Settings
To configure advanced options (optional) for the Compiler app, Edit these settings:
Bootstrap
Bootstrap
Configure the Pipeline Bootstrapper to authenticate the log10x account and launch a target pipeline.
Below is the default configuration from: bootstrap/config.yaml.
ewogICJ0eXBlIiA6ICJvYmplY3QiLAogICJwcm9wZXJ0aWVzIiA6IHsKICAgICJ0ZW54IiA6IHsKICAgICAgInR5cGUiIDogWwogICAgICAgICJzdHJpbmciLAogICAgICAgICJudWxsIgogICAgICBdLAogICAgICAibWFya2Rvd25EZXNjcmlwdGlvbiIgOiAiTmFtZSBvZiBwaXBlbGluZSB0byBleGVjdXRlXG5cblRhcmdldCBbcGlwZWxpbmVdKGh0dHBzOi8vZG9jLmxvZzEweC5jb20vZW5naW5lL3BpcGVsaW5lLykgdG8gZXhlY3V0ZS4gRm9yIGV4YW1wbGUsIHRvIHNwZWNpZnkgdGhlIFtydW5dKGh0dHBzOi8vZG9jLmxvZzEweC5jb20vcnVuLykgcGlwZWxpbmUgYW5kIGEgW1lBTUxdKGh0dHBzOi8vZG9jLmxvZzEweC5jb20vY29uZmlnL3lhbWwvKSBjb25maWcgZmlsZSBjb250YWluaW5nIGxhdW5jaCBhcmd1bWVudHMsIHVzZTogIGBgYCBjb25zb2xlICQgdGVueCBydW4gQH4vbXkueWFtbCBgYGAgVGhlIFlBTUwgZmlsZSBtYXkgc3BlY2lmeSB0aGUgcGlwZWxpbmUgbmFtZSB2aWEgYSAndGVueCcgZW50cnksIGFsbG93aW5nIHRoZSAncGlwZWxpbmUnIGFyZ3VtZW50IHRvIGJlIG9taXR0ZWQgZnJvbSB0aGUgY29tbWFuZCBsaW5lLiAgRm9yIGV4YW1wbGUgKG15LnlhbWwpOiAgYGBgIHlhbWwgdGVueDogcnVuICMgc2V0IHRoZSBwaXBlbGluZSB0byAncnVuJyBhcGlLZXk6IDxteS1rZXk+IC4uLiBgYGAgIEFsbG93cyBmb3IgbGF1bmNoaW5nIHRoZSBydW4gcGlwZWxpbmUgdmlhOiBgYGAgY29uc29sZSAkIHRlbnggQH4vbXkueWFtbCBgYGAiCiAgICB9LAogICAgImFwaUtleSIgOiB7CiAgICAgICJ0eXBlIiA6IFsKICAgICAgICAic3RyaW5nIiwKICAgICAgICAibnVsbCIKICAgICAgXSwKICAgICAgIm1hcmtkb3duRGVzY3JpcHRpb24iIDogIjEweCBhcGkga2V5XG5cblNwZWNpZmllcyBhbiBhcGkga2V5IHVzZWQgZm9yIGF1dGhlbnRpY2F0aW5nIGFnYWluc3QgdGhlIDEweCBzZXJ2aWNlLiBUaGlzIHZhbHVlIGlzIGFjY2Vzc2libGUgZnJvbSB5b3VyIFthY2NvdW50IHNldHRpbmdzXShodHRwczovL2NvbnNvbGUubG9nMTB4LmNvbSkuIgogICAgfSwKICAgICJtZXRyaWNFbmRwb2ludCIgOiB7CiAgICAgICJ0eXBlIiA6IFsKICAgICAgICAic3RyaW5nIiwKICAgICAgICAibnVsbCIKICAgICAgXSwKICAgICAgIm1hcmtkb3duRGVzY3JpcHRpb24iIDogIjEweCBzZXJ2aWNlIFByb21ldGhldXMgbWV0cmljcyBlbmRwb2ludFxuXG5TcGVjaWZpZXMgdGhlIGFkZHJlc3Mgb2YgdGhlIFByb21ldGhldXMgcmVtb3RlIHdyaXRlIGVuZHBvaW50IHRvIHdyaXRlIHBpcGVsaW5lIHVzYWdlIGFuZCBoZWFsdGggbWV0cmljcy4gICEhISBub3RlIFwiXCIgICAgICBUaGlzIGFyZ3VtZW50IGlzIG9ubHkgc2V0dGFibGUgaW4gdGhlIDEweCAnb24tcHJlbWlzZXMnIGJ1aWxkLiAoRGVmYXVsdDogaHR0cHM6Ly9wcm9tZXRoZXVzLmxvZzEweC5jb20vYXBpL3YxL3dyaXRlKSIsCiAgICAgICJkZWZhdWx0IiA6ICJodHRwczovL3Byb21ldGhldXMubG9nMTB4LmNvbS9hcGkvdjEvd3JpdGUiCiAgICB9LAogICAgInJ1bnRpbWUiIDogewogICAgICAidHlwZSIgOiAib2JqZWN0IiwKICAgICAgImFkZGl0aW9uYWxQcm9wZXJ0aWVzIiA6IGZhbHNlLAogICAgICAicHJvcGVydGllcyIgOiB7CiAgICAgICAgIm5hbWUiIDogewogICAgICAgICAgInR5cGUiIDogWwogICAgICAgICAgICAic3RyaW5nIiwKICAgICAgICAgICAgIm51bGwiCiAgICAgICAgICBdLAogICAgICAgICAgIm1hcmtkb3duRGVzY3JpcHRpb24iIDogIk5hbWUgdG8gcmVwb3J0IHRvIHRoZSAxMHggc2VydmljZSBlbmRwb2ludCBmb3IgdGhpcyBydW50aW1lIGluc3RhbmNlXG5cblNwZWNpZmllcyBhIGxvZ2ljYWwgbmFtZSB1c2VkIGFzIGEgW3RhZyB2YWx1ZV0oaHR0cHM6Ly93d3cuYmFlbGR1bmcuY29tL21pY3JvbWV0ZXIjNC1tZXRlcnMpIGZvciBwaXBlbGluZSBtZXRyaWNzLiBUaGlzIHZhbHVlIGlkZW50aWZpZXMgaW5zdGFuY2VzIG9mIHRoZSAxMHggcnVuL2NvbXBpbGUgcGlwZWxpbmVzIHdoZW4gcmVwb3J0aW5nIHRvIHRoZSAxMHggc2VydmljZS4gRm9yIGV4YW1wbGUsIGZvciBhIDEweCBbRWRnZSBPcHRpbWl6ZXJdKGh0dHBzOi8vZG9jLmxvZzEweC5jb20vYXBwcy9lZGdlL29wdGltaXplci8pIGZvciBGbHVlbnQgQml0IGZvcndhcmRlcnMgY29sbGVjdGluZyBldmVudHMgZnJvbSBhIGBicm9rZXJgIHVzZXItYXBwLCB0aGlzIHZhbHVlIGNhbiBiZSBzZXQgdG86IGBvcHRpbWl6ZV9mbHVlbnRiaXRfYnJva2VyYCIKICAgICAgICB9LAogICAgICAgICJhdHRyaWJ1dGVzIiA6IHsKICAgICAgICAgICJ0eXBlIiA6IFsKICAgICAgICAgICAgImFycmF5IiwKICAgICAgICAgICAgIm51bGwiCiAgICAgICAgICBdLAogICAgICAgICAgIm1hcmtkb3duRGVzY3JpcHRpb24iIDogIkxpc3Qgb2YgYXR0cmlidXRlcyB0byBhZGQgdG8gYWxsIG1ldHJpY3MgcmVwb3J0aW5nXG5cblNwZWNpZmllcyBhIGxpc3Qgb2Yga2V5LXZhbHVlIHBhaXJzIGluIHRoZSBmb3JtYXQgYGtleTp2YWx1ZWAgdG8gYmUgYWRkZWQgYXMgdGFncyB0byBwaXBlbGluZSBtZXRyaWNzIHJlcG9ydGVkIHRvIHRoZSAxMHggc2VydmljZS4gVGhlc2UgdGFncyBlbmFibGUgZmluZXItZ3JhaW5lZCBmaWx0ZXJpbmcgYW5kIGFuYWx5c2lzIGluIG1vbml0b3Jpbmcgc3lzdGVtcyBsaWtlIFByb21ldGhldXMuIE11bHRpcGxlIGF0dHJpYnV0ZXMgY2FuIGJlIGNvbWJpbmVkIGludG8gYSBzaW5nbGUgc3RyaW5nIHVzaW5nIGEgc2VtaWNvbG9uIChgO2ApLCBlLmcuLCBga2V5MTp2YWwxO2tleTI6dmFsMmAuICBJZiBhIGtleSBkb2VzIG5vdCBzdGFydCB3aXRoIHRlbnhfLCB0aGUgcHJlZml4IHRlbnhfIGlzIGF1dG9tYXRpY2FsbHkgcHJlcGVuZGVkIHRvIGVuc3VyZSBjb25zaXN0ZW5jeSBpbiB0YWcgbmFtaW5nIGNvbnZlbnRpb25zLiBGb3IgZXhhbXBsZSwgYSBwcm92aWRlZCBhdHRyaWJ1dGUgYXBwOm15LWFwcCB3aWxsIGJlIHJlcG9ydGVkIGFzIHRlbnhfYXBwOm15LWFwcCAgYGBgIHlhbWwgICBydW50aW1lQXR0cmlidXRlczogICAgIC0gYXBwOnJlcG9ydGVyICAgICAtIGVudjplZGdlIGBgYCIsCiAgICAgICAgICAiaXRlbXMiIDogewogICAgICAgICAgICAidHlwZSIgOiAic3RyaW5nIgogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfSwKICAgICJpbmNsdWRlUGF0aHMiIDogewogICAgICAidHlwZSIgOiBbCiAgICAgICAgImFycmF5IiwKICAgICAgICAibnVsbCIKICAgICAgXSwKICAgICAgIm1hcmtkb3duRGVzY3JpcHRpb24iIDogIlBpcGVsaW5lIGluY2x1ZGUgZm9sZGVyc1xuXG5TcGVjaWZpZXMgZm9sZGVycyBvbiBkaXNrIGZvciByZXNvbGluZyByZWxhdGl2ZSByZWZlcmVuY2VzIHdpdGhpbiBbaW5jbHVkZSBkaXJlY3RpdmVzXShodHRwczovL2RvYy5sb2cxMHguY29tL2NvbmZpZy95YW1sLyNpbmNsdWRlLWRpcmVjdGl2ZXMpLiAoRGVmYXVsdDogW1wid29ya2luZyBkaXJlY3Rvcnkgb2YgY3VycmVudCBwcm9jZXNzXCJdKSIsCiAgICAgICJpdGVtcyIgOiB7CiAgICAgICAgInR5cGUiIDogInN0cmluZyIKICAgICAgfSwKICAgICAgImRlZmF1bHQiIDogWwogICAgICAgICJ3b3JraW5nIGRpcmVjdG9yeSBvZiBjdXJyZW50IHByb2Nlc3MiCiAgICAgIF0KICAgIH0sCiAgICAiamFyRmlsZXMiIDogewogICAgICAidHlwZSIgOiBbCiAgICAgICAgImFycmF5IiwKICAgICAgICAibnVsbCIKICAgICAgXSwKICAgICAgIm1hcmtkb3duRGVzY3JpcHRpb24iIDogIkphciBmaWxlcyB0byBsb2FkXG5cblNwZWNpZmllcyBhIGxpc3Qgb2YgLmphciBmaWxlcyB0byBsb2FkIGludG8gdGhlIGhvc3QgSlZNIGZvciB1c2UgYnkgW2NvbXBpbGVdKGh0dHBzOi8vZG9jLmxvZzEweC5jb20vYXBpL2NvbXBpbGUvKSwgW2lucHV0XShodHRwczovL2RvYy5sb2cxMHguY29tL2FwaS9pbnB1dC8pIGFuZCBbb3V0cHV0XShodHRwczovL2RvYy5sb2cxMHguY29tL2FwaS9vdXRwdXQvKSBBUEkgZXh0ZW5zaW9ucy4gICEhISBub3RlIFwiXCIgICAgICBUaGlzIGFyZ3VtZW50IGlzIG5vdCBzdXBwb3J0ZWQgaW4gdGhlIFtlZGdlXShodHRwczovL2RvYy5sb2cxMHguY29tL2VuZ2luZS9mbGF2b3JzLyNlZGdlKSBydW50aW1lIGZsYXZvci4iLAogICAgICAiaXRlbXMiIDogewogICAgICAgICJ0eXBlIiA6ICJzdHJpbmciCiAgICAgIH0KICAgIH0sCiAgICAicXVpZXQiIDogewogICAgICAidHlwZSIgOiBbCiAgICAgICAgImJvb2xlYW4iLAogICAgICAgICJzdHJpbmciCiAgICAgIF0sCiAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJEaXNhYmxlIHByaW50aW5nIGJpbmFyeSB2ZXJzaW9uIGluZm9ybWF0aW9uIHRvIHRoZSBjb25zb2xlXG5cbkRpc2FibGUgcHJpbnRpbmcgYnVpbGQvdmVyc2lvbiBpbmZvcm1hdGlvbiB0byB0aGUgY29uc29sZSB1cG9uIGxhdW5jaCAoQWNjZXB0cyBib29sZWFuIG9yIHN0cmluZyB3aXRoICQ9IHByZWZpeCBmb3IgcnVudGltZSBldmFsdWF0aW9uKSAoRGVmYXVsdDogZmFsc2UpIiwKICAgICAgImRlZmF1bHQiIDogZmFsc2UKICAgIH0sCiAgICAiZGlzYWJsZWRBcmdzIiA6IHsKICAgICAgInR5cGUiIDogWwogICAgICAgICJhcnJheSIsCiAgICAgICAgIm51bGwiCiAgICAgIF0sCiAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJMaW1pdCBhcmd1bWVudCB2YWx1ZXMgdGhhdCBjYW4gYmUgc2V0IGJ5IHVzZXJzXG5cblNwZWNpZmllcyBhIGxpc3Qgb2YgbGF1bmNoIGFyZ3VtZW50cyB0aGF0IGFyZSBkaXNhbGxvd2VkIGZyb20gZWl0aGVyIGNvbW1hbmQgbGluZSBvciB1c2VyIGNvbmZpZyBmaWxlcy4gVGhpcyBhcmd1bWVudCBwcm92aWRlcyBhIG1ldGhvZCBvZiBsaW1pdGluZyB0aGUgdGFyZ2V0IFtwaXBlbGluZV0oaHR0cHM6Ly9kb2MubG9nMTB4LmNvbS9zaGFyZWQvYm9vdHN0cmFwLyNwaXBlbGluZSksIFtzb3VyY2VdKGh0dHBzOi8vZG9jLmxvZzEweC5jb20vY29uZmlnLyNzb3VyY2VzKSBhbmQgYW5kIFtjb21tYW5kIGxpbmVdKGh0dHBzOi8vZG9jLmxvZzEweC5jb20vY29uZmlnL2NsaS8pIHNldHRhYmxlIGJ5IHRoZSB1c2VyLiAgVGhpcyBtZWNoYW5pc20gZW5hYmxlcyBwaXBlbGluZSBsYXVuY2hlcnMgc3VjaCBhcyB0aGUgW1F1YXJrdXMgbGF1bmNoZXJdKGh0dHBzOi8vZG9jLmxvZzEweC5jb20vYXBpL2xhdW5jaC8jcXVhcmt1cykgdG8gbGltaXQgdXNlciBpbnB1dCByZWNlaXZlZCB2aWEgUkVTVCByZXF1ZXN0cyB0byBhIHRhcmdldCBzdWJzZXQgb2YgJ3NhZmUnIGFyZ3VtZW50cy4gIEZvciBleGFtcGxlLCBhZGRpbmcgW3Byb2NPdXRDb21tYW5kXShodHRwczovL2RvYy5sb2cxMHguY29tL3J1bi9vdXRwdXQvZXZlbnQvcHJvY2Vzcy8jcHJvY291dGNvbW1hbmQpIHRvIHRoaXMgbGlzdCBlbnN1cmVzIHRoYXQgbm8gZXh0ZXJuYWwgcHJvY2VzcyBvdXRwdXRzIGNhbiBiZSBsYXVuY2hlZCBieSB0aGUgcnVudGltZS4gIEFuIG9wdGlvbmFsIHJlZ2V4IHBhdHRlcm4gY2FuIGxpbWl0IGFyZ3VtZW50cyB0byBhIGNlcnRhaW4gc3Vic2V0IG9mIHZhbHVlcyBpbiB0aGUgZm9ybSBvZjogYDxhcmctbmFtZT5bOnBhdHRlcm5dYCAoZS5nLiwgc3BlY2lmaWMgcHJvY2VzcyBuYW1lcykuIE11bHRpcGxlIHBhdHRlcm5zIGNhbiBiZSBzcGVjaWZpZWQgcGVyIGFyZ3VtZW50LiAgTWF0Y2hpbmcgdGhlIGBzb3VyY2VgIGFyZ3VtZW50IGRldGVybWluZXMgd2hpY2ggc291cmNlIGxvY2F0aW9ucyB0byBpbnNwZWN0IChlLmcuLCBmb2xkZXJzLCBmaWxlcywgR2l0SHViIHJlcG9zKS4gRm9yIGV4YW1wbGUsIGFuIGFkbWluIG1heSBwbGFjZSAueWFtbCBjb25maWcgZmlsZXMgY29udGFpbmluZyBwcmVzZXQgRmx1ZW50IEJpdCBvdXRwdXRzIGluIGAvZXRjL2xvZzEweC9gLCBleGNsdWRpbmcgdGhlaXIgZW5jbG9zZWQgYXJndW1lbnRzIGZyb20gbGltaXRzIHNldCBieSB0aGlzIGxpc3QsIHdoaWxlIGRpc2FsbG93aW5nIHVzZXJzIHRvIGRpcmVjdGx5IHNldCB0aGVtIHZpYSB0aGUgY29tbWFuZC1saW5lIG9yIGJ5IHNvdXJjaW5nIHRoZW0gZnJvbSB0aGVpciBsb2NhbC9HaXRIdWIgY29uZmlnIGZpbGVzIChzZWUgZXhhbXBsZSBiZWxvdykuICBUbyBsaW1pdDogIFRoZSB0YXJnZXQgcGlwZWxpbmUgKGUuZy4sIFtydW5dKGh0dHBzOi8vZG9jLmxvZzEweC5jb20vcnVuLyksIFtjb21waWxlXShodHRwczovL2RvYy5sb2cxMHguY29tL2NvbXBpbGUvKSk6ICBgYGAgeWFtbCAgIGRpc2FibGVkQXJnczogICAtIFwicGlwZWxpbmU6XnJ1blwiICMgZGlzYWxsb3cgY29tcGlsZSBgYGAgIFRhcmdldCBhcmd1bWVudHMgKGUuZy4sIFtwcm9jZXNzIG91dHB1dHNdKGh0dHBzOi8vZG9jLmxvZzEweC5jb20vcnVuL291dHB1dC9ldmVudC9wcm9jZXNzLykpOiAgYGBgIHlhbWwgICAtIFwicHJvY091dENvbW1hbmQ6XmZsdWVudC1iaXQkXCIgICAjIGxpbWl0IHRvIEZsdWVudCBCaXQgb25seSAgICMgLSBwcm9jT3V0QXJnczogPHNwZWNpZnktcmVnZXg+ICAjIGZ1cnRoZXIgbGltaXQgYXJncyBmb3IgRmx1ZW50IEJpdCBgYGAgIENvbnRyb2wgd2hpY2ggYXJndW1lbnQgW3NvdXJjZXNdKGh0dHBzOi8vZG9jLmxvZzEweC5jb20vY29uZmlnLyNzb3VyY2VzKSB0byBpbnNwZWN0OiAgYGBgIHlhbWwgICAtIFwic291cmNlOl5naXRodWIuKlwiICAgICAgICAgICAgICMgaW5zcGVjdCBvZiBhbGwgYXJndW1lbnRzIHNvdXJjZWQgZnJvbSBHaXRIdWIgYWdhaW5zdCB0aGlzIGxpc3QgICAtIFwic291cmNlOl4oPyEvZXRjL2xvZzEweC8pLipcIiAgICMgaW5zcGVjdCBvZiBhbGwgYXJndW1lbnRzIHNvdXJjZWQgZnJvbSBjb25maWcgZmlsZXMgTk9UIGNvbnRhaW5lZCBpbjogL2V0Yy9sb2cxMHgvIGBgYCIsCiAgICAgICJpdGVtcyIgOiB7CiAgICAgICAgInR5cGUiIDogInN0cmluZyIKICAgICAgfQogICAgfSwKICAgICJkZWJ1Z0VudlZhcnMiIDogewogICAgICAidHlwZSIgOiBbCiAgICAgICAgImFycmF5IiwKICAgICAgICAibnVsbCIKICAgICAgXSwKICAgICAgIm1hcmtkb3duRGVzY3JpcHRpb24iIDogIkxpc3QgZW52aXJvbm1lbnQgdmFyaWFibGVzIHRvIGRlYnVnXG5cblNwZWNpZmllcyBhIGxpc3Qgb2YgZW52IHZhciBuYW1lcyBmb3Igd2hpY2ggdG8gbG9nIGluZm9ybWF0aW9uIHJlbGF0aW5nIHRvIGhvdyB0aGV5IGFyZSByZXNvbHZlZC4gRm9yIGV4YW1wbGUsIHRoZSBmb2xsb3dpbmcgY2FsbDogYEwxRW52LmdldChcIm15VmFyXCIsIFwibXlEZWZhdWx0XCIpYCBjYW4gYmUgcmVzb2x2ZWQgZnJvbSBhIG51bWJlciBvZiBbc291cmNlc10oaHR0cHM6Ly9kb2MubG9nMTB4LmNvbS9hcGkvanMvI1RlblhFbnYuZ2V0KSByYW5naW5nIGZyb20gbGF1bmNoIGFyZ3VtZW50cywgdG8gT1MvSlZNIHByb3BlcnRpZXMgYW5kIGEgZGVmYXVsdCB2YWx1ZSAoZS5nLiwgbXlEZWZhdWx0KS4gIFNldHRpbmcgdGhpcyB2YWx1ZSB0byBgbXlWYXJgIHdpbGwgbG9nIElORk8gbGV2ZWwgaW5mb3JtYXRpb24gZGV0YWlsaW5nIGhvdyB0aGUgdmFsdWUgb2YgdGhlIGBteVZhcmAgd2FzIHJlc29sdmVkLiIsCiAgICAgICJpdGVtcyIgOiB7CiAgICAgICAgInR5cGUiIDogInN0cmluZyIKICAgICAgfQogICAgfQogIH0sCiAgInJlcXVpcmVkIiA6IFsKICAgICJ0ZW54IiwKICAgICJhcGlLZXkiCiAgXSwKICAiYWRkaXRpb25hbFByb3BlcnRpZXMiIDogZmFsc2UKfQ==
# 🔟❎ compile bootstrap configuration
# This config file specifies bootstrap options for the compile pipeline.
# To learn more see https://doc.log10x.com/compile/bootstrap
# To learn more see https://doc.log10x.com/config/
tenx: compile
# =============================== Launch Settings ==============================
# 'apiKey' specifies an api key used authenticating against the 10x service
apiKey: $=TenXEnv.get("TENX_API_KEY", "NO-API-KEY")
# 'includePaths' specifies folders on disk for resolving relative config file/folder references in addition to the working folder
includePaths: []
# 'quiet' disables printing version information to the console.
# quiet: true
# 'jarFiles' specifies .jar files to dynamically load for use by compile, input and output API extensions.
jarFiles: []
# 'metricEndpoint' specifies the Prometheus endpoint to report usage/health metrics (enterprise version only).
# metricEndpoint: https://prometheus.log10x.com/api/v1/write
# specifies a list of launch arguments that are disallowed from either command line or user config files.
disabledArgs: []
Github Sync
Github Sync
Below is the default configuration from: gitops/config.yaml (* Required Fields).
ewogICIkc2NoZW1hIjogImh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvZHJhZnQtMDcvc2NoZW1hIyIsCiAgInRpdGxlIjogIkdpdE9wcyBDb25maWd1cmF0aW9uIiwKICAiZGVzY3JpcHRpb24iOiAiQ29uZmlndXJhdGlvbiBmb3IgcHVsbGluZyBzeW1ib2wsIGNvbmZpZyBhbmQgbG9va3VwIGZpbGVzIGZyb20gYSByZW1vdGUgR2l0SHViIHJlcG8gdG8gZW5hYmxlIGNlbnRyYWxpemVkIGNvbmZpZ3VyYXRpb24gbWFuYWdlbWVudCIsCiAgInR5cGUiOiAib2JqZWN0IiwKICAicHJvcGVydGllcyI6IHsKICAgICJ0ZW54IjogewogICAgICAidHlwZSI6ICJzdHJpbmciLAogICAgICAiZGVzY3JpcHRpb24iOiAiVGhlIHRhcmdldCAxMHggcGlwZWxpbmUgdG8gcnVuIChlLmcuLCBydW4sIGNvbXBpbGUpIgogICAgfSwKICAgICJpbmNsdWRlIjogewogICAgICAidHlwZSI6ICJhcnJheSIsCiAgICAgICJkZXNjcmlwdGlvbiI6ICJMaXN0IG9mIGluY2x1ZGUgc291cmNlcyIsCiAgICAgICJpdGVtcyI6IHsKICAgICAgICAidHlwZSI6ICJvYmplY3QiLAogICAgICAgICJwcm9wZXJ0aWVzIjogewogICAgICAgICAgInNvdXJjZSI6IHsKICAgICAgICAgICAgInR5cGUiOiAic3RyaW5nIiwKICAgICAgICAgICAgImNvbnN0IjogImdpdGh1YiIsCiAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJUaGUgc291cmNlIHR5cGUgZm9yIHRoaXMgaW5jbHVkZSIKICAgICAgICAgIH0sCiAgICAgICAgICAib3B0aW9ucyI6IHsKICAgICAgICAgICAgIiRyZWYiOiAiIy9kZWZpbml0aW9ucy9QaXBlbGluZUxhdW5jaEdpdEh1Yk9wdGlvbnMiCiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICAicmVxdWlyZWQiOiBbInNvdXJjZSIsICJvcHRpb25zIl0KICAgICAgfQogICAgfQogIH0sCiAgImRlZmluaXRpb25zIjogewogICAgIlBpcGVsaW5lTGF1bmNoR2l0SHViT3B0aW9ucyI6IHsKICAgICAgInR5cGUiOiAib2JqZWN0IiwKICAgICAgImRlc2NyaXB0aW9uIjogIkdpdEh1YiBwdWxsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyIsCiAgICAgICJwcm9wZXJ0aWVzIjogewogICAgICAgICJlbmFibGVkIjogewogICAgICAgICAgInR5cGUiOiAiYm9vbGVhbiIsCiAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiQ29udHJvbHMgd2hldGhlciB0byBlbmFibGUgdGhpcyBwdWxsIGNvbmZpZyIsCiAgICAgICAgICAiZGVmYXVsdCI6IGZhbHNlCiAgICAgICAgfSwKICAgICAgICAidG9rZW4iOiB7CiAgICAgICAgICAidHlwZSI6ICJzdHJpbmciLAogICAgICAgICAgImRlc2NyaXB0aW9uIjogIkFjY2VzcyB0b2tlbiBmb3IgYWNjZXNzaW5nIHRoZSBHaXRIdWIgcmVwby4gU2VlIGh0dHBzOi8vZG9jcy5naXRodWIuY29tL2VuL2F1dGhlbnRpY2F0aW9uL2tlZXBpbmcteW91ci1hY2NvdW50LWFuZC1kYXRhLXNlY3VyZS9tYW5hZ2luZy15b3VyLXBlcnNvbmFsLWFjY2Vzcy10b2tlbnMiCiAgICAgICAgfSwKICAgICAgICAicmVwbyI6IHsKICAgICAgICAgICJ0eXBlIjogWyJzdHJpbmciLCAibnVsbCJdLAogICAgICAgICAgImRlc2NyaXB0aW9uIjogIlRoZSBHaXRIdWIgdXNlci9yZXBvIGZyb20gd2hpY2ggdG8gcHVsbCAoZS5nLiwgJ293bmVyL3JlcG8nKSIKICAgICAgICB9LAogICAgICAgICJicmFuY2giOiB7CiAgICAgICAgICAidHlwZSI6IFsic3RyaW5nIiwgIm51bGwiXSwKICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJCcmFuY2ggb24gcmVwby4gSWYgbnVsbCwgdXNlcyB0aGUgcmVwbydzIGRlZmF1bHQgYnJhbmNoIiwKICAgICAgICAgICJkZWZhdWx0IjogbnVsbAogICAgICAgIH0sCiAgICAgICAgInBhdGhzIjogewogICAgICAgICAgInR5cGUiOiAiYXJyYXkiLAogICAgICAgICAgImRlc2NyaXB0aW9uIjogIkdsb2IgcGF0dGVybnMgd2l0aGluICdyZXBvJyB0byBwdWxsIGFuZCBleHRyYWN0IHRvIGEgdGVtcCBmb2xkZXIiLAogICAgICAgICAgIml0ZW1zIjogewogICAgICAgICAgICAidHlwZSI6ICJzdHJpbmciCiAgICAgICAgICB9LAogICAgICAgICAgImV4YW1wbGVzIjogWwogICAgICAgICAgICBbImNvbmZpZy8qLnlhbWwiLCAic3ltYm9scy8qLjEweC50YXIiLCAibG9va3Vwcy8qLmNzdiIsICJzY3JpcHRzLyouanMiXQogICAgICAgICAgXQogICAgICAgIH0sCiAgICAgICAgInN5bmNJbnRlcnZhbCI6IHsKICAgICAgICAgICJ0eXBlIjogWyJzdHJpbmciLCAibnVsbCJdLAogICAgICAgICAgImRlc2NyaXB0aW9uIjogIkludGVydmFsIHRvIGNoZWNrIHRoZSByZW1vdGUgYnJhbmNoIGZvciB1cGRhdGVzIChlLmcuLCAnNW1pbicpLiBTZXQgdG8gbnVsbCB0byBkaXNhYmxlIHN5bmMiLAogICAgICAgICAgImRlZmF1bHQiOiBudWxsLAogICAgICAgICAgImV4YW1wbGVzIjogWyI1bWluIiwgIjFoIiwgIjMwcyJdCiAgICAgICAgfQogICAgICB9LAogICAgICAicmVxdWlyZWQiOiBbImVuYWJsZWQiLCAicmVwbyJdLAogICAgICAiYWRkaXRpb25hbFByb3BlcnRpZXMiOiBmYWxzZQogICAgfQogIH0KfQo=
# 🔟❎ GitOps configuration
# This config file pulls symbol, config and lookup files from a remote repo to
# enable centralized configuration management via GitHub.
# To learn more see https://doc.log10x.com/config/github
# The target 10x pipeline to run (e.g., run, compile) is specified in the config files pulled from the repo
tenx: any
include:
- source: github
options:
# 'enabled' controls whether to enable this pull config
enabled: false # (❗ REQUIRED)
# 'token' specifies an access token for accessing the Github repo.
# To learn more see https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens
token: $=TenXEnv.get("GH_TOKEN")
# 'repo' specifies the GitHub user/repo from which to pull
repo: null # (❗ REQUIRED)
# 'branch' on 'repo' (if null, uses default repo default branch)
branch: main
# 'paths' specifies Glob patterns within 'repo' to pull and extract to a temp folder.
paths:
- test
# - config/*.yaml # https://doc.log10x.com/config/yaml
# - symbols/*.10x.tar # https://doc.log10x.com/run/symbol
# - lookups/*.csv # https://doc.log10x.com/api/js/#TenXLookup
# - scripts/*.js # https://doc.log10x.com/api/js
# 'syncInterval' specifies an interval by which check to check the remote branch for updates (null to disable)
# This interval works in conjunction with: https://doc.log10x.com/run/reload
syncInterval: 5min
Scan
Scan
Configure the Input Scanner to capture symbol values from source code/binary files and link to an output symbol library.
advanced
Configure the Input Scanner to capture symbol values from source code/binary files and link to an output symbol library.
Below is the default configuration from: advanced/config.yaml.
ewogICJ0eXBlIiA6ICJvYmplY3QiLAogICJwcm9wZXJ0aWVzIiA6IHsKICAgICJ0ZW54IiA6IHsKICAgICAgInR5cGUiIDogInN0cmluZyIKICAgIH0sCiAgICAiaW5wdXRQYXRocyIgOiB7CiAgICAgICJ0eXBlIiA6IFsKICAgICAgICAiYXJyYXkiCiAgICAgIF0sCiAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJJbnB1dCBmb2xkZXJzIHRvIHNjYW5cblxuUHJvdmlkZXMgYSBsaXN0IG9mIGZvbGRlcnMgdGhhdCBhcmUgdHJhdmVyc2VkIGluIHNlYXJjaCBvZiBzb3VyY2UgY29kZSAoZS5nLiAuanMsIC5jcHApLCBiaW5hcnkgKGUuZy4sIC5zbywgLmphciwgLnppcCkgYW5kIHRleHQgKGUuZy4sIC5qc29uLCAueG1sKSBmaWxlcyB0byBjYXB0dXJlIHN5bWJvbCB2YWx1ZXMgZnJvbSBhbmQgb3V0cHV0IHRvIHN5bWJvbCB1bml0IGZpbGVzLiBJbnB1dCBmb2xkZXJzIG1heSBjb250YWluIGZpbGVzIGFuZCBmb2xkZXJzIHB1bGxlZCBmcm9tIFtHaXRIdWJdKGh0dHBzOi8vZG9jLmxvZzEweC5jb20vY29tcGlsZS9wdWxsL2dpdGh1Yi8pIG9yICBhbmQgW0FydGlmYWN0b3J5XShodHRwczovL2RvYy5sb2cxMHguY29tL2NvbXBpbGUvYXJ0aWZhY3RvcnkpLiIsCiAgICAgICJpdGVtcyIgOiB7CiAgICAgICAgInR5cGUiIDogInN0cmluZyIKICAgICAgfQogICAgfSwKICAgICJvdXRwdXRTeW1ib2xGb2xkZXIiIDogewogICAgICAidHlwZSIgOiBbCiAgICAgICAgInN0cmluZyIsCiAgICAgICAgIm51bGwiCiAgICAgIF0sCiAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJMb2NhdGlvbiBvZiBvdXRwdXQgc3ltYm9sIGZvbGRlclxuXG5TcGVjaWZpZXMgdGhlIHJvb3QgZm9sZGVyIGluIHdoaWNoIHRvIHdyaXRlIG91dHB1dCBzeW1ib2wgdW5pdCBmaWxlcy4gVGhpcyBjb21waWxlciBbc2NhbiBwaGFzZV0oaHR0cHM6Ly9kb2MubG9nMTB4LmNvbS9jb21waWxlL3NjYW4vKSBtaXJyb3JzIHRoZSBzdHJ1Y3R1cmUgb2YgdGhlIFtpbnB1dFBhdGhzXShodHRwczovL2RvYy5sb2cxMHguY29tL2NvbXBpbGUvc2Nhbi8jaW5wdXRwYXRocykgYXJndW1lbnQsIHBsYWNpbmcgZWFjaCBvdXRwdXQgc3ltYm9sIHVuaXQgaW4gdGhlIHNhbWUgcmVsYXRpdmUgcGF0aCB1bmRlciBbb3V0cHV0U3ltYm9sRm9sZGVyXShodHRwczovL2RvYy5sb2cxMHguY29tL2NvbXBpbGUvc2Nhbi8jb3V0cHV0c3ltYm9sZm9sZGVyKSBhcyBpdHMgc291cmNlL2JpbmFyeSBpbnB1dCBmaWxlIHVuZGVyIGl0cyByZXNwZWN0aXZlIGBpbnB1dFBhdGhzYCBmb2xkZXIgZW50cnkuICBGb3IgZXhhbXBsZSwgaWYgW2lucHV0UGF0aHNdKGh0dHBzOi8vZG9jLmxvZzEweC5jb20vY29tcGlsZS9zY2FuLyNpbnB1dHBhdGhzKSBpcyBgfi9kZXZgIGFuZCBpdCBjb250YWlucyB0aGUgZmlsZSBgfi9kZXYvYXBwL2Zvby5qc2AsIGFuZCB0aGlzIHZhbHVlIGlzIGB+L3N5bWJvbHNgLCB0aGUgcmVzcGVjdGl2ZSBvdXRwdXQgc3ltYm9sIHVuaXQgZmlsZSBpczogYH4vc3ltYm9scy9hcHAvZm9vLmpzLjEweC5qc29uYC4iCiAgICB9LAogICAgInNjYW4iIDogewogICAgICAidHlwZSIgOiAib2JqZWN0IiwKICAgICAgImFkZGl0aW9uYWxQcm9wZXJ0aWVzIiA6IGZhbHNlLAogICAgICAicHJvcGVydGllcyIgOiB7CiAgICAgICAgImZvcmNlIiA6IHsKICAgICAgICAgICJ0eXBlIiA6IFsKICAgICAgICAgICAgImJvb2xlYW4iLAogICAgICAgICAgICAic3RyaW5nIgogICAgICAgICAgXSwKICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJDb250cm9sIHdoZXRoZXIgdG8gc2NhbiBpbnB1dCBmaWxlcyBldmVuIGlmIGEgbWF0Y2hpbmcgZXhpc3Rpbmcgc3ltYm9sIGZpbGUgZXhpc3RzXG5cbkNvbnRyb2xzIHdoZXRoZXIgdG8gcmV1c2UgbWF0Y2hpbmcgc3ltYm9sIGZpbGVzIHdpdGhpbiBbaW5wdXRQYXRoc10oaHR0cHM6Ly9kb2MubG9nMTB4LmNvbS9jb21waWxlL3NjYW4vI2lucHV0cGF0aHMpLiBUaGlzIG9wdGlvbiBpcyBwcmltYXJpbHkgdXNlZnVsIHdoZW4gZGVidWdnaW5nIGEgbmV3IHNjYW5uZXIgbW9kdWxlIGNvbmZpZ3VyYXRpb24gKGUuZy4sIEFOVExSIGdyYW1tYXIpICBpbiBjb25qdW5jdGlvbiB3aXRoIHRoZSBbc2Nhbm5lciBkZWJ1Z2dpbmddKGh0dHBzOi8vZG9jLmxvZzEweC5jb20vY29tcGlsZS9zY2FuKSBvcHRpb25zLiAoQWNjZXB0cyBib29sZWFuIG9yIHN0cmluZyB3aXRoICQ9IHByZWZpeCBmb3IgcnVudGltZSBldmFsdWF0aW9uKSAoRGVmYXVsdDogZmFsc2UpIiwKICAgICAgICAgICJkZWZhdWx0IiA6IGZhbHNlCiAgICAgICAgfSwKICAgICAgICAiaW5Qcm9jZXNzIiA6IHsKICAgICAgICAgICJ0eXBlIiA6IFsKICAgICAgICAgICAgImJvb2xlYW4iLAogICAgICAgICAgICAic3RyaW5nIgogICAgICAgICAgXSwKICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJDb250cm9scyB3aGV0aGVyIHRvIHNjYW4gc291cmNlL2JpbmFyeSBpbnB1dCBmaWxlcyB1c2luZyBzdWItcHJvY2VzcyhlcylcblxuVGhlIHNjYW5uZXIgY2FuIGxhdW5jaCBbc3VicHJvY2Vzc2VzXShodHRwczovL2RvYy5sb2cxMHguY29tL2NvbXBpbGUvc2Nhbi8jc3VicHJvY2Vzc18xKSB0byBjYXB0dXJlIFtzeW1ib2xdKGh0dHBzOi8vZG9jLmxvZzEweC5jb20vcnVuL3RyYW5zZm9ybS9zdHJ1Y3R1cmUvI3N5bWJvbHMpIGluZm9ybWF0aW9uIGZyb20gc3BlY2lmaWMgdGFyZ2V0IHNvdXJjZS9iaW5hcnkgaW5wdXQgZmlsZXMuICAgR2VuZXJhdGluZyBpbnB1dCBmaWxlIFtBU1RzXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9BYnN0cmFjdF9zeW50YXhfdHJlZSkgdG8gc2NhbiBmb3Igc3ltYm9scyB2YWx1ZXMgZm9yIGNvbXBsZXggc3ludGF4ZXMgY2FuIGJlIGEgbGVuZ3RoeSwgcmVzb3VyY2UtY29uc3VtaW5nIG9wZXJhdGlvbiwgd2hpY2ggaW4gdGhlIGNhc2Ugb2YgIFtBTlRMUiBzeW50YXhlc10oaHR0cHM6Ly90b21hc3NldHRpLm1lL2ltcHJvdmluZy10aGUtcGVyZm9ybWFuY2Utb2YtYW4tYW50bHItcGFyc2VyLykgbWF5IHRpbWVvdXQgb3IgcnVuIG91dCBvZiBtZW1vcnkuICAgICBQcm9jZXNzIFtpc29sYXRpb25dKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1Byb2Nlc3NfaXNvbGF0aW9uKSBhbGxvd3MgZm9yIHRlcm1pbmF0aW5nIHNjYW4gb3BlcmF0aW9ucyB0aGF0IHRpbWVvdXQgZm9yIHNwZWNpZmljIGZpbGVzLCB3aGlsZSBhbGxvd2luZyBvdGhlcnMgdG8gcHJvY2VlZC4gKEFjY2VwdHMgYm9vbGVhbiBvciBzdHJpbmcgd2l0aCAkPSBwcmVmaXggZm9yIHJ1bnRpbWUgZXZhbHVhdGlvbikgKERlZmF1bHQ6IGZhbHNlKSIsCiAgICAgICAgICAiZGVmYXVsdCIgOiBmYWxzZQogICAgICAgIH0sCiAgICAgICAgInRocmVhZFBvb2xTaXplIiA6IHsKICAgICAgICAgICJ0eXBlIiA6IFsKICAgICAgICAgICAgInN0cmluZyIsCiAgICAgICAgICAgICJudWxsIgogICAgICAgICAgXSwKICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJNYXhpbXVtIG51bWJlciBvZiB0aHJlYWRzIHRvIHVzZSBjb25jdXJyZW50bHkgcHJvY2VzcyBpbnB1dCBzb3VyY2UgY29kZSAvYmluYXJ5IGZpbGVzXG5cbkNvbnRyb2xzIHRoZSBtYXhpbXVtIG51bWJlciBvZiB0aHJlYWRzIHRvIHByb2Nlc3MgaW5wdXQgc291cmNlIGNvZGUvYmluYXJ5IGZpbGVzIGNvbmN1cnJlbnRseTogLSBJZiB0aGUgdmFsdWUgaXMgYmV0d2VlbiAwIGFuZCAxLCB0aGUgbnVtYmVyIGNhbGN1bGF0ZXMgYSBwZXJjZW50YWdlIG9mIGF2YWlsYWJsZSBjb3JlcyAoZS5nLiwgMC41ID0gdXNlIHVwIHRvIDUwJSBvZiBhdmFpbGFibGUgY29yZXMpLiAgIC0gSWYgdGhlIHZhbHVlIGlzID49IDEsIHRoZSB2YWx1ZSBzZXRzIGEgZml4ZWQgbnVtYmVyIG9mIHRocmVhZHMgKGUuZy4sIDEwID0gMTAgdGhyZWFkcykuICAgLSBJZiB0aGUgdmFsdWUgaXMgMSwgYWxsb2NhdGUgYSBzaW5nbGUgdGhyZWFkIHRvIHByb2Nlc3MgaW5wdXQgZmlsZXMuIChEZWZhdWx0OiAwLjUpIiwKICAgICAgICAgICJkZWZhdWx0IiA6ICIwLjUiCiAgICAgICAgfSwKICAgICAgICAidW5pdFRpbWVvdXQiIDogewogICAgICAgICAgInR5cGUiIDogWwogICAgICAgICAgICAic3RyaW5nIiwKICAgICAgICAgICAgIm51bGwiCiAgICAgICAgICBdLAogICAgICAgICAgIm1hcmtkb3duRGVzY3JpcHRpb24iIDogIlRpbWVvdXQgaW50ZXJ2YWwgZm9yIHNjYW5uaW5nIGEgc291cmNlIGNvZGUgL2JpbmFyeSBpbnB1dCBmaWxlXG5cblNldHMgdGhlIHRpbWVvdXQgaW50ZXJ2YWwgd2hlbiBzY2FubmluZyBhIHNvdXJjZSBjb2RlIC9iaW5hcnkgaW5wdXQgZmlsZSBiZWZvcmUgZHJvcHBpbmcgaXQuIFNldCB0byBudWxsIHRvIGlnbm9yZS4gKERlZmF1bHQ6IDIwcykiLAogICAgICAgICAgImRlZmF1bHQiIDogIjIwcyIKICAgICAgICB9LAogICAgICAgICJvcGVyYXRpb25UaW1lb3V0IiA6IHsKICAgICAgICAgICJ0eXBlIiA6IFsKICAgICAgICAgICAgInN0cmluZyIsCiAgICAgICAgICAgICJudWxsIgogICAgICAgICAgXSwKICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJUaW1lb3V0IGludGVydmFsIGZvciB0aGUgZW50aXJlIHNjYW5uaW5nIG9wZXJhdGlvblxuXG5TZXRzIHRoZSB0aW1lb3V0IGludGVydmFsIGZvciB0aGUgZW50aXJlIHNjYW5uaW5nIG9wZXJhdGlvbiBiZWZvcmUgdGVybWluYXRpbmcgaXQuIFNldCB0byBudWxsIHRvIGlnbm9yZS4gKERlZmF1bHQ6IDEwbSkiLAogICAgICAgICAgImRlZmF1bHQiIDogIjEwbSIKICAgICAgICB9LAogICAgICAgICJkZWJ1ZyIgOiB7CiAgICAgICAgICAidHlwZSIgOiAib2JqZWN0IiwKICAgICAgICAgICJhZGRpdGlvbmFsUHJvcGVydGllcyIgOiBmYWxzZSwKICAgICAgICAgICJwcm9wZXJ0aWVzIiA6IHsKICAgICAgICAgICAgIm9yaWdpbnMiIDogewogICAgICAgICAgICAgICJ0eXBlIiA6IFsKICAgICAgICAgICAgICAgICJhcnJheSIsCiAgICAgICAgICAgICAgICAibnVsbCIKICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJMaXN0IG9mIGlucHV0IGZpbGUgbmFtZXMgZm9yIHdoaWNoIHRvIGxvZyBpbmZvcm1hdGlvblxuXG5TcGVjaWZpZXMgYSBsaXN0IG9mIGlucHV0IGZpbGUgbmFtZXMgKGUuZy4sIG15LnNjYWxhLCBmb28uamF2YSkgdG8gbG9nIGluZm9ybWF0aW9uIHJlbGF0aW5nIHRvIHdoaWNoIHN5bWJvbHMgd2VyZSBjYXB0dXJlZC9za2lwcGVkLiBTcGVjaWZ5ICcqJyBmb3IgYWxsIGZpbGVzLiIsCiAgICAgICAgICAgICAgIml0ZW1zIiA6IHsKICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJzdHJpbmciCiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICAic3ltYm9scyIgOiB7CiAgICAgICAgICAgICAgInR5cGUiIDogWwogICAgICAgICAgICAgICAgImFycmF5IiwKICAgICAgICAgICAgICAgICJudWxsIgogICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgIm1hcmtkb3duRGVzY3JpcHRpb24iIDogIkxpc3Qgb2Ygbm9kZSB0eXBlcyB3aXRoaW4gYSBzY2FubmVyIEFTVCB0cmVlIGZvciB3aGljaCB0byBsb2cgaW5mb3JtYXRpb25cblxuTGlzdCBvZiBub2RlcyB3aXRoaW4gYW4gaW5wdXQgQVNUIHRyZWUsIHN1Y2ggYXMgY2xhc3MgYW5kIG1ldGhvZCBuYW1lcyhlLmcuLCAnTXlDbGFzcycsICdmb28nKSBmb3Igd2hpY2ggdG8gbG9nIGluZm9ybWF0aW9uIHJlbGF0aW5nIHRvIHRoZSBjb250ZXh0IGluIHdoaWNoIHRoZXkgd2VyZSBjYXB0dXJlZC9za2lwcGVkIGFzIHN5bWJvbHMuICBTcGVjaWZ5ICcqJyBmb3IgYWxsIG5vZGVzLiIsCiAgICAgICAgICAgICAgIml0ZW1zIiA6IHsKICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJzdHJpbmciCiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICAibG9nZ2VyTmFtZSIgOiB7CiAgICAgICAgICAgICAgInR5cGUiIDogWwogICAgICAgICAgICAgICAgInN0cmluZyIsCiAgICAgICAgICAgICAgICAibnVsbCIKICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJEZWJ1ZyBsb2dnZXIgbmFtZVxuXG5TcGVjaWZpZXMgdGhlIGxvZzRqIGxvZ2dlciBmb3IgbG9nZ2luZyB2YWx1ZXMgZm9yIHN5bWJvbHMvZmlsZXMgbWF0Y2hpbmcgJ2RlYnVnT3JpZ2lucycgYW5kICdkZWJ1Z1N5bWJvbHMnLiAoRGVmYXVsdDogW2NvbnNvbGVPdXRdKGh0dHBzOi8vZ2l0aHViLmNvbS9sb2ctMTB4L2NvbmZpZy9ibG9iL21haW4vbG9nNGoyLnlhbWwjTDY2KSkiLAogICAgICAgICAgICAgICJkZWZhdWx0IiA6ICJbY29uc29sZU91dF0oaHR0cHM6Ly9naXRodWIuY29tL2xvZy0xMHgvY29uZmlnL2Jsb2IvbWFpbi9sb2c0ajIueWFtbCNMNjYpIgogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgInByaW50T3V0cHV0IiA6IHsKICAgICAgInR5cGUiIDogWwogICAgICAgICJib29sZWFuIiwKICAgICAgICAic3RyaW5nIgogICAgICBdLAogICAgICAibWFya2Rvd25EZXNjcmlwdGlvbiIgOiAiQ29udHJvbHMgd2hldGhlciB0byBlbWl0IG91dHB1dCBzY2FuIG9wZXJhdGlvbnMgcHJvZ3Jlc3MgdG8gdGhlIGNvbnNvbGVcblxuQ29udHJvbHMgd2hldGhlciBpbmZvcm1hdGlvbiByZWxhdGluZyB0byBzeW1ib2wgdW5pdHMgc2Nhbm5pbmcgaXMgZW1pdHRlZCB0byB0aGUgc3Rkb3V0IHN0cmVhbS4gVGhpcyB2YWx1ZSBzaG91bGQgYmUgc2V0IHRvIHRydWUgd2hlbiB0aGUgY3VycmVudCAxMHggcHJvY2VzcyBpcyAgc3Bhd25lZCBieSBhIHBhcmVudCAxMHggJ2NvbXBpbGUnIHBpcGVsaW5lIHRvIHJlcG9ydCBpdHMgcHJvZ3Jlc3MuIChBY2NlcHRzIGJvb2xlYW4gb3Igc3RyaW5nIHdpdGggJD0gcHJlZml4IGZvciBydW50aW1lIGV2YWx1YXRpb24pIChEZWZhdWx0OiBmYWxzZSkiLAogICAgICAiZGVmYXVsdCIgOiBmYWxzZQogICAgfSwKICAgICJ1bml0c1RvU2NhblBlckJhdGNoIiA6IHsKICAgICAgInR5cGUiIDogWwogICAgICAgICJudW1iZXIiLAogICAgICAgICJzdHJpbmciCiAgICAgIF0sCiAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJNYXhpbXVtIG51bWJlciBvZiBpbnB1dCBmaWxlcyB0byBzY2FuIHBlciBzdWItcHJvY2Vzcy5cblxuU2V0cyB0aGUgbWF4aW11bSBudW1iZXIgb2Ygc291cmNlL2JpbmFyeSBpbnB1dCBmaWxlcyB0byBzY2FuIGJ5IGEgc2luZ2xlICdjb21waWxlJyBzdWItcHJvY2Vzcy4gU2V0IHRvIDAgdG8gdW5saW1pdGVkLiAoQWNjZXB0cyBudW1iZXIgb3Igc3RyaW5nIHdpdGggJD0gcHJlZml4IGZvciBydW50aW1lIGV2YWx1YXRpb24pIChEZWZhdWx0OiA0MCkiLAogICAgICAiZGVmYXVsdCIgOiA0MAogICAgfSwKICAgICJ0b2tlbkRlbGltcyIgOiB7CiAgICAgICJ0eXBlIiA6IFsKICAgICAgICAic3RyaW5nIiwKICAgICAgICAibnVsbCIKICAgICAgXSwKICAgICAgIm1hcmtkb3duRGVzY3JpcHRpb24iIDogIlRva2VuIGRlbGltaXRlcnNcblxuRGVmaW5lcyB3aGljaCBjaGFyYWN0ZXJzIGJyZWFrIGEgc3RyaW5nIG9mIGV2ZW50IGNoYXJhY3RlcnMgaW50byB0b2tlbnMgdG8gY2xhc3NpZnkgYXMgc3ltYm9scyBvciB2YXJpYWJsZXMuIChEZWZhdWx0OiA8PnwuIF1bOi0rLyo9XFxcXCx7fV8oKTsnXFxcIiRcXHRcXG5AKSIsCiAgICAgICJkZWZhdWx0IiA6ICI8PnwuIF1bOi0rLyo9XFxcXCx7fV8oKTsnXFxcIiRcXHRcXG5AIgogICAgfSwKICAgICJmaWxlRXh0U3RyaW5nRm9ybWF0cyIgOiB7CiAgICAgICJ0eXBlIiA6IFsKICAgICAgICAiYXJyYXkiLAogICAgICAgICJudWxsIgogICAgICBdLAogICAgICAibWFya2Rvd25EZXNjcmlwdGlvbiIgOiAiU3RyaW5nIGZvcm1hdCBzcGVjaWZpZXIgY2hhcmFjdGVyc1xuXG5Db250cm9scyB3aGljaCBjaGFyYWN0ZXJzIGlkZW50aWZ5IHRoZSBzdGFydCBvZiBhIFtmb3JtYXQgc3BlY2lmaWVyXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9QcmludGYjRm9ybWF0X3NwZWNpZmllcikgZm9yIGVhY2ggcHJvZ3JhbW1pbmcgbGFuZ3VhZ2UgZXh0ZW5zaW9uIGluIHRoZSBmb3JtIG9mIDxleHQ+Ojxmb3JtYXRQcmVmaXg+IChlLmcuLCBgLmphdmE6JWApLiAgSXQgaXMgYSBzdGFuZGFyZCBwcm9ncmFtbWluZyBwcmFjdGljZSB0byB1c2Ugc3RyaW5nIGZvcm1hdHMgdG8gbG9nIG1lc3NhZ2VzIGluIHRoZSBmb3JtIG9mOiAgYGBgIGphdmEgbG9nLmVycm9yKFwiY291bGQgbm90IGNvbm5lY3QgdG8ge30gd2l0aCBzdGF0dXMge31cIiwgaG9zdCwgc3RhdHVzKTsgYGBgICBXaGVuIGFuIFRlblhUZW1wbGF0ZSB0b2tlbml6ZXIgcHJvY2Vzc2luZyBhbiBldmVudCBpZGVudGlmaWVzIGEgZm9ybWF0IHByZWZpeCAoZS5nLiwgYCVgKSBpdCBza2lwcyBpdCBhbmQgYXBwZW5kcyBzdWJzZXF1ZW50IHN5bWJvbCB0b2tlbnMgKGUuZy4sIGB3aXRoIHN0YXR1c2ApIHRvIHRoZSBzeW1ib2wgc2VxdWVuY2UgcHJlY2VkaW5nIHRoZW0gKGUuZy4sIGBjb3VsZCBub3QgY29ubmVjdCB0b2ApLiIsCiAgICAgICJpdGVtcyIgOiB7CiAgICAgICAgInR5cGUiIDogInN0cmluZyIKICAgICAgfQogICAgfSwKICAgICJtYXhTeW1ib2wiIDogewogICAgICAidHlwZSIgOiAib2JqZWN0IiwKICAgICAgImFkZGl0aW9uYWxQcm9wZXJ0aWVzIiA6IGZhbHNlLAogICAgICAicHJvcGVydGllcyIgOiB7CiAgICAgICAgInVuaXRTZWN0aW9uU2l6ZSIgOiB7CiAgICAgICAgICAidHlwZSIgOiBbCiAgICAgICAgICAgICJudW1iZXIiLAogICAgICAgICAgICAic3RyaW5nIgogICAgICAgICAgXSwKICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJNYXhpbXVtIG51bWJlciBvZiBzeW1ib2wgdG9rZW5zIHRvIHN0b3JlIGluIGEgc2luZ2xlIHN5bWJvbCB1bml0IGZpbGVcblxuQ29udHJvbHMgdGhlIG1heGltdW0gbnVtYmVyIG9mIHN5bWJvbCB0b2tlbnMgdG8gc3RvcmUgaW4gYSBzeW1ib2wgdW5pdCBiZWZvcmUgc3BsaXR0aW5nIGl0LiBUaGlzIG9wdGlvbiBzdXBwb3J0cyBsYXJnZSBzb3VyY2UgY29kZSAvYmluYXJ5IGlucHV0IGZpbGVzIHRoYXQgbWF5IGhhdmUgdGhvdXNhbmRzIG9mIHRleHQgc3ltYm9scyB0byBhdm9pZCAgY3JlYXRpbmcgc2l6ZWFibGUgaW5kaXZpZHVhbCBzeW1ib2wgdW5pdCBmaWxlcy4gICAgICAgICBTZXQgdG8gbnVsbCB0byBpZ25vcmUuIChBY2NlcHRzIG51bWJlciBvciBzdHJpbmcgd2l0aCAkPSBwcmVmaXggZm9yIHJ1bnRpbWUgZXZhbHVhdGlvbikgKERlZmF1bHQ6IDUwMCkiLAogICAgICAgICAgImRlZmF1bHQiIDogNTAwCiAgICAgICAgfSwKICAgICAgICAidW5pdHNQZXJUb2tlbiIgOiB7CiAgICAgICAgICAidHlwZSIgOiBbCiAgICAgICAgICAgICJudW1iZXIiLAogICAgICAgICAgICAic3RyaW5nIgogICAgICAgICAgXSwKICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJOdW1iZXIgb2Ygc3ltYm9sIHVuaXRzIHRvIHJldHJpZXZlIHdoZW4gc2VhcmNoaW5nIGZvciB0aGUgb3JpZ2luIG9mIGFuIFRlblhUZW1wbGF0ZSBzeW1ib2wgc2VxdWVuY2VcblxuQ29udHJvbHMgdGhlIG1heGltdW0gbnVtYmVyIG9mIHN5bWJvbCB1bml0cyB0byBsb2FkIGZyb20gdGhlIHBpcGVsaW5lJ3Mgc3ltYm9sIGxpYnJhcnkgd2hlbiBzZWFyY2hpbmcgZm9yIHRoZSBvcmlnaW4gb2YgYSBzcGVjaWZpYyBbVGVuWFRlbXBsYXRlXShodHRwczovL2RvYy5sb2cxMHguY29tL3J1bi90ZW1wbGF0ZS8pIHN5bWJvbC4gICBUaGUgW3N5bWJvbFNlcXVlbmNlXShodHRwczovL2RvYy5sb2cxMHguY29tL2FwaS9qcy8jVGVuWE9iamVjdCtzeW1ib2xTZXF1ZW5jZSkgZnVuY3Rpb24gcXVlcmllcyB0aGUgc291cmNlIGNvZGUvYmluYXJ5IG9yaWdpbiBvZiBzeW1ib2wgc2VxdWVuY2VzIGluIGEgdGFyZ2V0IFRlblhUZW1wbGF0ZSB0byBpZGVudGlmeSB0aGUgbG9naWNhbCBbbWVzc2FnZV0oaHR0cHM6Ly9kb2MubG9nMTB4LmNvbS9ydW4vaW5pdGlhbGl6ZS9tZXNzYWdlLykgcG9ydGlvbiBvZiBhIHRhcmdldCBhcHAvaW5mcmEgZXZlbnRzIHZzLiB2YXJpYWJsZSBhbmQgY29udGV4dCBpbmZvcm1hdGlvbiAoZS5nLiwgdXNlciwgaG9zdCwgc2V2ZXJpdHkpLiAgIFNpbmNlIGEgW3N5bWJvbF0oaHR0cHM6Ly9kb2MubG9nMTB4LmNvbS9ydW4vdHJhbnNmb3JtL3N0cnVjdHVyZS8jc3ltYm9scykgdmFsdWUgbWF5IGFwcGVhciBpbiBodW5kcmVkcyBvciBtb3JlIGxvY2F0aW9ucyBhY3Jvc3MgYSBjb2RlIGJhc2UsICBsaW1pdGluZyB0aGUgbnVtYmVyIG9mIHN5bWJvbCB1bml0cyB0byBsb2FkIGlzIG5lY2Vzc2FyeSB0byByZWR1Y2UgbWVtb3J5IGNvbnN1bXB0aW9uLiAgIEEgc2Vjb25kIGNvbnNpZGVyYXRpb24gaXMgcGxhY2luZyBhbiB1cHBlciBsaW1pdCBvbiB0aGUgbnVtYmVyIG9mIHVuaXRzIHRvIGxvYWQgZnJvbSB0aGUgc3ltYm9sIGxpYnJhcnksICB3aGljaCBpcyB0aGUgbW9yZSBmcmVxdWVudCBhIHN5bWJvbCBpcywgdGhlIGxvd2VyIHRoZSBwcm9iYWJpbGl0eSBvZiBzZWxlY3RpbmcgdGhlIGNvcnJlY3Qgb3JpZ2luLiAoQWNjZXB0cyBudW1iZXIgb3Igc3RyaW5nIHdpdGggJD0gcHJlZml4IGZvciBydW50aW1lIGV2YWx1YXRpb24pIChEZWZhdWx0OiAxMjgpIiwKICAgICAgICAgICJkZWZhdWx0IiA6IDEyOAogICAgICAgIH0KICAgICAgfQogICAgfQogIH0sCiAgInJlcXVpcmVkIiA6IFsKICAgICJpbnB1dFBhdGhzIgogIF0sCiAgImFkZGl0aW9uYWxQcm9wZXJ0aWVzIiA6IGZhbHNlCn0=
# 🔟❎ 'compile' symbol scanner advanced config
# Configure input and output options for the compile pipeline.
# To learn more see https://doc.log10x.com/compile/scan/
# Set the 10x pipeline to 'compile'
tenx: compile
inputPaths: []
# ============================ Advanced options ===============================
# ----------------------------- Tokenizer options -----------------------------
# Tokenization options provide control over how the symbol scanners parse source and config file input.
# To learn more https://doc.log10x.com/compile/scan/#tokenize
# 'tokenDelims' defines which characters break a string of event characters into tokens to
# classify as symbols or variables.
tokenDelims: "<>|. ][:-+/*=\\,{}_();'\"$\t\n@"
# 'fileExtStringFormats' controls which characters identify the start of a format specifier (https://en.wikipedia.org/wiki/Printf#Format_specifier).
fileExtStringFormats:
- .java:%
- .py:{
- .js:${
- .php:$
- .swift:\(
- .kt:$
- .rb:#{
- .ex:#{
- .c:%
- .cpp:%
- .cs:{
- .go:%
- .rs:{
- .ts:${
- .pl:$
- .sh:$
- .r:%
- .m:%
- .scala:$
maxSymbol:
# 'unitsPerToken' controls the maximum number of symbol units to load from the
# pipeline's symbol library when searching for the origin of a specific TenXTemplate symbol.
unitsPerToken: 128
# ----------------------------- Subprocess options ----------------------------
# Subprocess options control whether scanners execute in the current 10x Engine instance
# or via a sub-process to provide better isolation over parsing of complex source code ASTs.
# To learn more https://doc.log10x.com/compile/scan/#subprocess_1
# 'unitsToScanPerBatch' sets the maximum number of input files to scan per subprocess instance.
# When this threshold is exceeded the current subprocess terminated and a new one is spawned until scan is complete.
unitsToScanPerBatch: 200
scan:
# ----------------------------- Threading options ----------------------------
# 'threadPoolSize'controls the maximum number of threads to concurrently
# process input source/binary files. If the value is between 0 and 1, the number calculates
# a percentage of available cores (e.g., 0.5 = use up to 50% of available cores).
# If the value is >= 1, the value sets a fixed number of threads (e.g., 10 = 10 threads).
# If the value is 1, allocate a single thread to process input files.
# To learn more see https://doc.log10x.com/compile/scan/#parallel
threadPoolSize: "0.5"
# 'scanUnitTimeout' sets the timeout interval when scanning a source/binary input
# file before dropping it.
unitTimeout: 30s
# 'scanOperationTimeout' sets the timeout interval for the entire scanning operation
# before terminating it.
operationTimeout: 10m
# -------------------------------- Debug Option -------------------------------
# The settings below provide control over what information is logged
# to console/file when scanning input source code/text/binary files for symbol values.
# These options are primarily used when adding support for a new programming language
# syntax via the 'ANTLR' scanner, text file formats via the Jackson 'text' scanner
# or an external command using the 'executable' scanner.
debug:
# 'origins' lists names of input source/binary files
# (e.g. .class, .js, .yaml, .exe) for which debug information
# is printed to the console via 'consoleOut' log4j logger.
# Printed output is dependent on the scanner assigned to process the input file
# and usually includes the AST of the input file from which tokens are selected.
# This information can be used when debugging which symbols are extracted
# from an input file in the context of an 'antlr', 'text' or 'executable' scanner.
# Set to '*' to match all input files.
origins: [
# '*'
]
# 'symbols' lists the values of nodes within the AST of a
# target input file (e.g. MyClass, MyEnum, myFunc, ..) for which
# debug information is printed to the console via the 'consoleOut' logger.
# This includes source context (e.g. class, enum) and path within the AST
# in which the node was detected. Set to '*' to match all AST nodes.
symbols: [
#'*'
]
# 'inProcess' controls whether to scan source/binary input files from within the current
# 10x process or launch a sequential series subprocesses for better isolation
# inProcess: true
# 'force' enables scanning of source/binary input files even if a matching
# symbol unit was found in 'inputPaths'. This flag is useful when debugging
# an Antlr/text/exec scanner using 'debugOrigins' and 'debugSymbols'
# to ensure a scan takes place even if a matching symbol unit is found.
# force: false
pattern
Configure Regex pattern scanners to extract symbol values from a files using regular expressions.
Below is the default configuration from: pattern/config.yaml.
ewogICJ0eXBlIiA6ICJvYmplY3QiLAogICJwcm9wZXJ0aWVzIiA6IHsKICAgICJ0ZW54IiA6IHsKICAgICAgInR5cGUiIDogInN0cmluZyIKICAgIH0sCiAgICAicGF0dGVybiIgOiB7CiAgICAgICJ0eXBlIiA6ICJhcnJheSIsCiAgICAgICJpdGVtcyIgOiB7CiAgICAgICAgInR5cGUiIDogIm9iamVjdCIsCiAgICAgICAgImFkZGl0aW9uYWxQcm9wZXJ0aWVzIiA6IGZhbHNlLAogICAgICAgICJwcm9wZXJ0aWVzIiA6IHsKICAgICAgICAgICJmaWxlRmlsdGVyIiA6IHsKICAgICAgICAgICAgInR5cGUiIDogWwogICAgICAgICAgICAgICJzdHJpbmciLAogICAgICAgICAgICAgICJudWxsIgogICAgICAgICAgICBdLAogICAgICAgICAgICAibWFya2Rvd25EZXNjcmlwdGlvbiIgOiAiRmlsZSBuYW1lIGZpbHRlciByZWd4IHBhdHRlcm5cblxuRGVmaW5lcyBhIHJlZ2V4IHBhdHRlcm4gYSBmaWxlIG5hbWUgbXVzdCBtYXRjaCBmb3IgdGhpcyBzY2FubmVyIHRvIGJlIGFwcGxpZWQgdG8gaXRzIGNvbnRlbnRzIgogICAgICAgICAgfSwKICAgICAgICAgICJsaW5lRmlsdGVyIiA6IHsKICAgICAgICAgICAgInR5cGUiIDogWwogICAgICAgICAgICAgICJzdHJpbmciLAogICAgICAgICAgICAgICJudWxsIgogICAgICAgICAgICBdLAogICAgICAgICAgICAibWFya2Rvd25EZXNjcmlwdGlvbiIgOiAiRmlsZSBsaW5lIGZpbHRlciByZWd4IHBhdHRlcm5cblxuRGVmaW5lcyBhIHJlZ2V4IHBhdHRlcm4gYXBwbGllZCB0byBlYWNoIGxpbmUgd2l0aGluIGEgdGFyZ2V0IGZpbGUgd2hlcmUgZWFjaCBtYXRjaGluZyByZWdpb24gd2lsbCBiZSBleHRyYWN0ZWQgYXMgc3ltYm9sIHZhbHVlLiBOT1RFOiBUYWtlIGludG8gY29uc2lkZXJhdGlvbiBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMgb2YgdGhlIGlucHV0IGV4cHJlc3Npb24gdG8gYXZvaWQgbG9uZyBwcm9jZXNzaW5nIHRpbWUgYW5kL29yIGVycm9ycy4iCiAgICAgICAgICB9LAogICAgICAgICAgImV4dHJhY3RRdW90ZXMiIDogewogICAgICAgICAgICAidHlwZSIgOiBbCiAgICAgICAgICAgICAgImJvb2xlYW4iLAogICAgICAgICAgICAgICJzdHJpbmciCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJFeHRyYWN0IHNpbmdsZSBhbmQgZG91YmxlIHF1b3RlZCB2YWx1ZXNcblxuRGVmaW5lcyB3aGV0aGVyIHRvIGV4dHJhY3Qgc2luZ2xlIGFuZCBkb3VibGUgcXVvdGVkIHZhbHVlcyBmcm9tIGlucHV0IGxpbmVzLCB0YWtpbmcgaW50byBjb25zaWRlcmF0aW9uIGVzY2FwaW5nIGFuZCBpbXByb3Blcmx5IGNsb3NlZCBxdW90YXRpb25zLiBUaGlzIG9wdGlvbnMgcHJvdmlkZXMgYW0gZWZmaWNpZW50IG1ldGhvZCBmb3IgZXh0cmFjdGluZyBzdHJpbmcgY29uc3RhbnRzIGZyb20gaW5wdXQgZmlsZXMgd2l0aG91dCByZWx5aW5nIG9uIHJlZ2V4IGJhY2t0cmFja2luZy4gVG8gbGVhcm4gbW9yZSBzZWUgW3BzZXVkbyBjb2RlXSAoaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vdGFsd2d4L2QzMTEzM2Y2Mjc4YmI4YjY0MGJhZjA1MGY3ODA0N2Q1KS4gKEFjY2VwdHMgYm9vbGVhbiBvciBzdHJpbmcgd2l0aCAkPSBwcmVmaXggZm9yIHJ1bnRpbWUgZXZhbHVhdGlvbikiCiAgICAgICAgICB9LAogICAgICAgICAgIm1hdGNoQ29udGV4dCIgOiB7CiAgICAgICAgICAgICJ0eXBlIiA6IFsKICAgICAgICAgICAgICAic3RyaW5nIiwKICAgICAgICAgICAgICAibnVsbCIKICAgICAgICAgICAgXSwKICAgICAgICAgICAgIm1hcmtkb3duRGVzY3JpcHRpb24iIDogIk91dHB1dCBzeW1ib2wgY29udGV4dFxuXG5TZXRzIHRoZSBzb3VyY2UgY29udGV4dCB0byBhc3NpZ24gYW55IHN5bWJvbHMgY29sbGVjdGVkIHVzaW5nIHRoaXMgdGhpcyBwYXR0ZXJuIHNlbGVjdG9yLiBGb3IgcG9zc2libGUgdmFsdWVzLCBzZWUgc3ltYm9sIFtjb250ZXh0c10oaHR0cHM6Ly9kb2MubG9nMTB4LmNvbS9ydW4vdHJhbnNmb3JtL3N5bWJvbC8jY29udGV4dHMpLiAgIElmIGEgdGFyZ2V0IGlucHV0IGxpbmUgY29udGFpbnMgbWF0Y2hlcyBmb3IgW3BhdHRlcm5MaW5lRmlsdGVyXShodHRwczovL2RvYy5sb2cxMHguY29tL2NvbXBpbGUvc2Nhbm5lci9wYXR0ZXJuLyNwYXR0ZXJubGluZWZpbHRlcikgQU5EIHRoaXMgdmFsdWUgaXMgc2V0IHRvIFttZXRob2RdKGh0dHBzOi8vZG9jLmxvZzEweC5jb20vcnVuL3RyYW5zZm9ybS9zeW1ib2wvI21ldGhvZCkgQU5EIHRoZSBtYXRjaGluZyBsaW5lIGNvbnRhaW5zIHZhbHVlcyBzcGVjaWZpZWQgYXMgW2xvZ21ldGhvZHNdKGh0dHBzOi8vZG9jLmxvZzEweC5jb20vY29tcGlsZS9zY2FubmVyL2xvZ01ldGhvZHMvI2xvZ21ldGhvZHMpIG9yIFtsb2dzdHJlYW1zXShodHRwczovL2RvYy5sb2cxMHguY29tL2NvbXBpbGUvc2Nhbm5lci9sb2dNZXRob2RzLyNsb2dzdHJlYW1zKSBvdXRzaWRlIG9mIG1hdGNoIGJvdW5kcyB0aGVuIHRoZSBjb250ZXh0IHdpbGwgYmUgc2V0IGFzIFtsb2ddKGh0dHBzOi8vZG9jLmxvZzEweC5jb20vcnVuL3RyYW5zZm9ybS9zeW1ib2wvI2xvZykuICBGb3IgZXhhbXBsZSwgZm9yIHRoZSBmb2xsb3dpbmcgaW5wdXQgbGluZSwgYSBwYXR0ZXJuIHNjYW5uZXIgc2V0IHRvIGBtZXRob2RgIHRoYXQgZXh0cmFjdHMgcXVvdGVkIHN0cmluZ3Mgd2lsbCBhc3NpZ25lZCB0aGUgZXh0cmFjdGVkIHZhbHVlJ3MgY29udGV4dCBhcyBgbG9nYCBnaXZlbiB0aGUgcHJlc2VuY2Ugb2YgdGhlIGBDb25zb2xlYCB2YWx1ZSB3aGljaCBpcyBkZWZpbmVkIGFzIGxvZ2dpbmcgc3RyZWFtIGlkZW50aWZpZXIuICBgYGAgY3MgQ29uc29sZS5Xcml0ZUxpbmUoXCJBY2NvdW50aW5nIFxcXCJzZXJ2aWNlIHN0YXJ0ZWRcIik7IGBgYCIKICAgICAgICAgIH0sCiAgICAgICAgICAidW5lc2NhcGVTY2hlbWUiIDogewogICAgICAgICAgICAidHlwZSIgOiBbCiAgICAgICAgICAgICAgInN0cmluZyIsCiAgICAgICAgICAgICAgIm51bGwiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJVbmVzY2FwZSBzY2hlbWUgdG8gYXBwbHkgdG8gbWF0Y2hpbmcgc2VxdWVuY2VzXG5cblNwZWNpZmllcyBhbiB1bmVzY2FwZSBhbGdvcml0aG0gdG8gYXBwbHkgdG8gbWF0Y2hpbmcgc2VxdWVuY2VzIG9mIFtwYXR0ZXJuTGluZUZpbHRlcl0oaHR0cHM6Ly9kb2MubG9nMTB4LmNvbS9jb21waWxlL3NjYW5uZXIvcGF0dGVybi8jcGF0dGVybmxpbmVmaWx0ZXIpLiBTdXBwb3J0ZWQgdmFsdWVzOiBbanNvbixqYXZhLHhtbCxodG1sLGphdmFTY3JpcHRdLiAgIElmIG5vdCBzcGVjaWZpZWQsIGNoYXJhY3RlcnMgYXJlIHRyZWF0ZWQgYXMgbm90IGVzY2FwZWQuICBUbyBsZWFybiBtb3JlIHNlZSBbVW5lc2NhcGUgYWxnb3JpdGhtc10oaHR0cHM6Ly93d3cudW5iZXNjYXBlLm9yZy91c2luZ3VuYmVzY2FwZS5odG1sKS4iCiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICAicmVxdWlyZWQiIDogWwogICAgICAgICAgImZpbGVGaWx0ZXIiLAogICAgICAgICAgImV4dHJhY3RRdW90ZXMiCiAgICAgICAgXQogICAgICB9CiAgICB9CiAgfSwKICAiYWRkaXRpb25hbFByb3BlcnRpZXMiIDogZmFsc2UKfQ==
# 🔟❎ 'compile' pattern quoted strings configuration
# This pattern symbol scanner extracts single and double quoted string values
# from target files. This pattern is used a default for capturing symbol values
# from source files for which no ANTLR grammar or built-in scanner is available.
# Set the 10x pipeline to 'compile'
tenx: compile
# ============================== Pattern Options ==============================
pattern:
# 'fileFilter' is set as a sink for prominent source code files. Available built-in and ANTLR
# scanners will take precedence over this pattern scanner
- fileFilter: \b\w+\.(java|cs|php|cpp|cxx|c|h|H|hxx|cc|hh|py|go|js|rs|bash|scala|sc|ts|rb|kt|lua|groovy|swift)\b
extractQuotes: true
# 'lineFilter' defines a regex pattern applied to each line within a target file.
# Each matching region will be extracted as symbol value
lineFilter: null
# 'matchContext' sets the source context to assign any symbols collected using this this pattern selector.
# For possible values, see https://doc.log10x.com/run/transform/symbol/#contexts
matchContext: method_invoke
# 'unescapeScheme' specifies an unescape algorithm to apply to matching sequences of patternLineFilter.
# Supported values: [json,java,xml,html,javaScript].
unescapeScheme: java
Cpp
Configure the ANTLR scanner to extract symbols from any programming language using the ANTLR framework.
Below is the default configuration from: antlr/cpp.yaml.
ewogICJ0eXBlIiA6ICJvYmplY3QiLAogICJwcm9wZXJ0aWVzIiA6IHsKICAgICJ0ZW54IiA6IHsKICAgICAgInR5cGUiIDogInN0cmluZyIKICAgIH0sCiAgICAiYW50bHJQYXJzZVVuaXRUaW1lb3V0IiA6IHsKICAgICAgInR5cGUiIDogWyAic3RyaW5nIiwgIm51bGwiIF0sCiAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJTb3VyY2UgZmlsZSBwYXJzZSB0aW1lb3V0XG5cbkRlZmluZXMgdGhlIHRpbWVvdXQgaW50ZXJ2YWwgZm9yIHBhcnNpbmcgYW5kIHNjYW5uaW5nIGEgc291cmNlL2JpbmFyeSBpbnB1dCBmaWxlIGJlZm9yZSBhYm9ydGluZy4gZGVmYXVsdCB2YWx1ZTogNjBzZWMiCiAgICB9CiAgfSwKICAiYWRkaXRpb25hbFByb3BlcnRpZXMiIDogZmFsc2UKfQ==
# 🔟❎ 'compile' C++ ANTLR symbol scanner configuration
# The 'cpp' configuration instructs the ANTLR scanner which symbol values (e.g. class/func names, code constants)
# to extract from c++ source files.
# Set the 10x pipeline to 'compile'
tenx: compile
# ============================== ANTLR Options ================================
antlr:
# The 'antlrLang' module is defined in: https://doc.log10x.com/compile/scanner/antlr/langs
# These values define the ANTLR grammar .g4 file used to
# to tokenize and construct an AST for the target cpp file
lang: cpp
fileExt:
- .cpp
- .cxx
- .c++
- .c
- .h
- .H
- .hpp
- .hxx
- .h++
- .cc
- .hh
grammarFile: grammar/CPP14Parser.g4
lexerFile: grammar/CPP14Lexer.g4
rootRule: translationUnit
reserved:
- '::'
- '<<'
- inline
- namespace
- <
- class
- '>'
# 'lineFilters' specifies a list of regex patterns for skipping input lines
lineFilters:
- ^\s*(//.*|/\*.*\*/)$
- ^.*\bnew\(\);\b.*$
# The 'rule' list defines the nodes within a cpp AST tree that are captured
# and added to the output symbol unit.
# To learn more see: https://doc.log10x.com/compile/scanner/antlr/rules/
rule:
- name: enumerator
lang: cpp
context: enum
recursive: false
capture: allSymbols
- name: blockDeclaration
lang: cpp
context: method_invoke
recursive: true
capture: literalsOnly
- name: enumbase
lang: cpp
context: enum
recursive: true
capture: literalsOnly
- name: classHeadName
lang: cpp
context: class
recursive: true
capture: allSymbols
- name: enumSpecifier
lang: cpp
context: class
recursive: false
capture: literalsOnly
condition: ^enumHead$
tag: EnumHead
- name: enumHead
lang: cpp
context: class
recursive: false
capture: allSymbols
ifTag: EnumHead
- name: functionDefinition
lang: cpp
context: method_decl
recursive: false
capture: allSymbols
condition: ^functionDefinition$
tag: FunctionDefinition
- name: declaratorid
lang: cpp
context: method_decl
recursive: true
capture: allSymbols
ifTag: FunctionDefinition
- name: jumpStatement
lang: cpp
context: var_assign
recursive: true
capture: literalsOnly
- name: functionBody
lang: cpp
context: method_invoke
recursive: false
capture: literalsOnly
# condition: ^functionBody$
# tag: FunctionBody
- name: statement
lang: cpp
context: method_invoke
recursive: true
capture: literalsOnly
- name: classSpecifier
lang: cpp
context: class
recursive: false
capture: literalsOnly
subRule: memberSpecification
- name: staticAssertDeclaration
lang: cpp
context: var_assign
recursive: true
capture: literalsOnly
- name: parameterDeclarationList
lang: cpp
context: method_invoke
recursive: false
capture: literalsOnly
# condition: ^parameterDeclarationList$
# tag: ParameterDeclarationList
- name: enumeratorDefinition
lang: cpp
context: enum
recursive: false
capture: allSymbols
- name: namespaceDefinition
lang: cpp
context: package
recursive: false
capture: allSymbols
- name: constantExpression
lang: cpp
context: var_assign
recursive: true
capture: literalsOnly
- name: templateArgumentList
lang: cpp
context: method_invoke
recursive: false
capture: literalsOnly
# condition: ^templateArgumentList$
# tag: TemplateArgumentList
Csharp
Configure the ANTLR scanner to extract symbols from any programming language using the ANTLR framework.
Below is the default configuration from: antlr/csharp.yaml.
ewogICJ0eXBlIiA6ICJvYmplY3QiLAogICJwcm9wZXJ0aWVzIiA6IHsKICAgICJ0ZW54IiA6IHsKICAgICAgInR5cGUiIDogInN0cmluZyIKICAgIH0sCiAgICAiYW50bHJQYXJzZVVuaXRUaW1lb3V0IiA6IHsKICAgICAgInR5cGUiIDogWyAic3RyaW5nIiwgIm51bGwiIF0sCiAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJTb3VyY2UgZmlsZSBwYXJzZSB0aW1lb3V0XG5cbkRlZmluZXMgdGhlIHRpbWVvdXQgaW50ZXJ2YWwgZm9yIHBhcnNpbmcgYW5kIHNjYW5uaW5nIGEgc291cmNlL2JpbmFyeSBpbnB1dCBmaWxlIGJlZm9yZSBhYm9ydGluZy4gZGVmYXVsdCB2YWx1ZTogNjBzZWMiCiAgICB9CiAgfSwKICAiYWRkaXRpb25hbFByb3BlcnRpZXMiIDogZmFsc2UKfQ==
# 🔟❎ 'compile' C# ANTLR symbol scanner configuration
# The 'csharp' configuration instructs the ANTLR scanner which symbol values (e.g. class/func names, code constants)
# to extract from c# source files.
# Set the 10x pipeline to 'compile'
tenx: compile
# ============================== ANTLR Options ================================
antlr:
# The 'antlrLang' module is defined in: https://doc.log10x.com/compile/scanner/antlr/langs
# These values define the ANTLR-generated parser class used to
# to tokenize and construct an AST for the target c# file.
lang: csharp
fileExt:
- .csx
- .cs
parserClass: com.log10x.antlr.generated.csharp.CSharpParser
lexerClass: com.log10x.antlr.generated.csharp.CSharpLexer
# 'charStreamClass' is set to remove language elements introduced later than V6.0 which is the latest release supported by this grammar.
# To learn more see https://github.com/antlr/grammars-v4/tree/master/csharp#readme
charStreamClass: com.log10x.antlr.parsers.CSharpDowngrader
rootRule: compilation_unit
reserved:
- namespace
- interface
- class
- enum
# 'lineFilters' specifies a list of regex patterns for skipping input lines
lineFilters:
- ^\s*(//.*|/\*.*\*/)$
# Remove unsupported C# v10 File scoped namespaces
- ^namespace.*;$
# Remove unsupported C# v9 Target-typed new operator
# - "(?<!\\w)new\\s*\\(\\s*\\)\\s*;"
- ".*new\\(.*"
# The 'rule' list defines the nodes within a csharp AST tree that are captured
# and added to the output symbol unit.
# To learn more see: https://doc.log10x.com/compile/scanner/antlr/rules/
rule:
- name: interface_definition
lang: csharp
context: class
recursive: false
capture: allSymbols
subRule: identifier
- name: enum_member_declaration
lang: csharp
context: enum
recursive: true
capture: allSymbols
- name: enum_definition
lang: csharp
context: class
recursive: false
capture: allSymbols
subRule: identifier
- name: namespace_body
lang: csharp
context: package
recursive: true
capture: literalsOnly
- name: method_invocation
lang: csharp
context: method_invoke
recursive: true
capture: literalsOnly
- name: object_creation_expression
lang: csharp
context: method_invoke
recursive: true
capture: literalsOnly
- name: interpolated_regular_string_part
lang: csharp
context: method_invoke
recursive: false
capture: allSymbols
subRule: interpolated_regular_string_part
- name: namespace_declaration
lang: csharp
context: package
recursive: true
capture: allSymbols
- name: statement_list
lang: csharp
context: method_invoke
recursive: true
capture: literalsOnly
- name: constant_declaration
lang: csharp
context: var_assign
recursive: true
capture: literalsOnly
- name: method_declaration
lang: csharp
context: method_decl
recursive: true
capture: allSymbols
subRule: identifier
- name: method_body
lang: csharp
context: method_decl
recursive: false
capture: literalsOnly
#- name: method_member_name
# lang: csharp
# context: method_decl
# recursive: true
# capture: allSymbols
- name: local_variable_initializer
lang: csharp
context: var_assign
recursive: true
capture: literalsOnly
- name: returnStatement
lang: csharp
context: var_assign
recursive: true
capture: literalsOnly
- name: class_definition
lang: csharp
context: class
recursive: false
capture: allSymbols
subRule: identifier
- name: attribute_argument
lang: csharp
context: annotation_invoke
recursive: true
capture: literalsOnly
pythonAST
Configure the CPython AST scanner to scan Python source code for symbol values.
Below is the default configuration from: pythonAST/default.yaml.
# 🔟❎ 'compile' python symbol scanner settings
# The Python AST symbol scanner leverages the Python native .py parsing engine.
# to launch the 'astpretty' script from https://github.com/asottile/astpretty
# to parse the contents of an input .py file.
# If a python runtime is unavailable when executing the 'compile' pipeline,
# the 'pythonASTPath' value can be set to null or empty string to default
# to the ANTLR symbol scanner defined in 'python.yaml'
# 'pythonPath' specifies the command for launching a Python run-time.
# A test script verifies a Python run-time is available. If the test script is unsuccessful,
# the scanner is disabled.
pythonPath: python3
archive
Configure the Archive scanner to scan compressed archives for enclosed files containing symbol values.
Below is the default configuration from: archive/default.yaml.
ewogICJ0eXBlIiA6ICJvYmplY3QiLAogICJwcm9wZXJ0aWVzIiA6IHsKICAgICJ0ZW54IiA6IHsKICAgICAgInR5cGUiIDogInN0cmluZyIKICAgIH0sCiAgICAiYXJjaGl2ZUV4dGVuc2lvbnMiIDogewogICAgICAidHlwZSIgOiBbICJhcnJheSIsICJudWxsIiBdLAogICAgICAibWFya2Rvd25EZXNjcmlwdGlvbiIgOiAiU3VwcG9ydGVkIGFyY2hpdmUgZXh0ZW5zaW9uc1xuXG5EZWZpbmVzIHRoZSBmaWxlIGV4dGVuc2lvbnMgb2YgYXJjaGl2ZSB6aXAgZmlsZXMgdG8gc2NhbiBmb3Igc291cmNlL2JpbmFyeSBpbnB1dCBmaWxlcy4gKERlZmF1bHQ6IFtcIi56aXBcIixcIi5qYXJcIixcIi53YXJcIixcIi5lYXJcIixcIi43c1wiLFwiLmd6XCIsXCIuYnJcIixcIi5sejRcIixcIi5sem1hXCIsXCIudGFyXCIsXCIudGFyLmJyXCIsXCIudGFyLmd6XCIsXCIudGFyLmJ6MlwiLFwiLnRhci5sejRcIixcIi50YXIubHptYVwiXSkiLAogICAgICAiaXRlbXMiIDogewogICAgICAgICJ0eXBlIiA6ICJzdHJpbmciCiAgICAgIH0sCiAgICAgICJkZWZhdWx0IiA6IFsgIi56aXAiLCAiLmphciIsICIud2FyIiwgIi5lYXIiLCAiLjdzIiwgIi5neiIsICIuYnIiLCAiLmx6NCIsICIubHptYSIsICIudGFyIiwgIi50YXIuYnIiLCAiLnRhci5neiIsICIudGFyLmJ6MiIsICIudGFyLmx6NCIsICIudGFyLmx6bWEiIF0KICAgIH0KICB9LAogICJhZGRpdGlvbmFsUHJvcGVydGllcyIgOiBmYWxzZQp9
# 🔟❎ 'compile' archive symbol scanner config
# The archive'scanner iterates through the contents of file archives
# to seek source/binary files whose contents to scan into
# the output symbol files.
# Set the 10x pipeline to 'compile'
tenx: compile
archiveExtensions:
- .zip
- .jar
- .war
- .ear
- .7s
- .gz
- .br
- .lz4
- .lzma
- .tar
- .tar.br
- .tar.gz
- .tar.bz2
- .tar.lz4
- .tar.lzma
logMethods
Configure the Log method/stream definitions to define logger method and output stream names.
Below is the default configuration from: logMethods/default.yaml.
ewogICJ0eXBlIiA6ICJvYmplY3QiLAogICJwcm9wZXJ0aWVzIiA6IHsKICAgICJ0ZW54IiA6IHsKICAgICAgInR5cGUiIDogInN0cmluZyIKICAgIH0sCiAgICAibG9nIiA6IHsKICAgICAgInR5cGUiIDogIm9iamVjdCIsCiAgICAgICJhZGRpdGlvbmFsUHJvcGVydGllcyIgOiBmYWxzZSwKICAgICAgInByb3BlcnRpZXMiIDogewogICAgICAgICJtZXRob2RzIiA6IHsKICAgICAgICAgICJ0eXBlIiA6IFsKICAgICAgICAgICAgImFycmF5IiwKICAgICAgICAgICAgIm51bGwiCiAgICAgICAgICBdLAogICAgICAgICAgIm1hcmtkb3duRGVzY3JpcHRpb24iIDogIk5hbWVzIG9mIHNvdXJjZSBjb2RlIG1ldGhvZHMgdG8gbWFyayBhcyAnbG9nZ2luZydcblxuTGlzdHMgJ2xvZ2dpbmcnIG1ldGhvZCBuYW1lcyB3aG9zZSBpbnZvY2F0aW9ucyB0byBtYXJrICdsb2dnaW5nJy4gTG9nZ2luZyBmcmFtZXdvcmtzIGNvbW1vbmx5IGRlZmluZSBzdGFuZGFyZCBtZXRob2RzIHRvIGVtaXQgZXZlbnQgaW5mb3JtYXRpb24gdG8gcHJvZ3JhbSBvdXRwdXQgKGUuZy4sICd3YXJuJywgJ2Vycm9yJykuIiwKICAgICAgICAgICJpdGVtcyIgOiB7CiAgICAgICAgICAgICJ0eXBlIiA6ICJzdHJpbmciCiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICAibWV0aG9kUmVnZXgiIDogewogICAgICAgICAgInR5cGUiIDogWwogICAgICAgICAgICAic3RyaW5nIiwKICAgICAgICAgICAgIm51bGwiCiAgICAgICAgICBdLAogICAgICAgICAgIm1hcmtkb3duRGVzY3JpcHRpb24iIDogIkEgcGF0dGVybiB0aGF0IHNvdXJjZSBjb2RlIG1ldGhvZHMgbmFtZXMgbXVzdCBtYXRjaCB0byBxdWFsaWZ5IGFzICdsb2dnaW5nJyBtZXRob2RzXG5cblNwZWNpZmllcyBhIHBhdHRlcm4gZm9yIHN5bWJvbCBzY2FubmVycyB0byBhcHBseSB0byBzb3VyY2UgY29kZSBtZXRob2QvZnVuY3Rpb24gbmFtZXMgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdG8gbWFyayB0aGVtIGFzICdsb2dnaW5nJy4gRm9yIGV4YW1wbGU6IF4obG9nfExvZyl8KExvZ3xsb2cpJCIKICAgICAgICB9LAogICAgICAgICJzdHJlYW1zIiA6IHsKICAgICAgICAgICJ0eXBlIiA6IFsKICAgICAgICAgICAgImFycmF5IiwKICAgICAgICAgICAgIm51bGwiCiAgICAgICAgICBdLAogICAgICAgICAgIm1hcmtkb3duRGVzY3JpcHRpb24iIDogIk5hbWVzIG9mIHNvdXJjZSBjb2RlIHZhcmlhYmxlcyB0byBtYXJrIGFzICdsb2dnaW5nJ1xuXG5MaXN0cyAnbG9nZ2luZycgbWVtYmVyIG5hbWVzIHdob3NlIGFzc2lnbm1lbnRzIHRvIG1hcmsgJ2xvZ2dpbmcnLiBQcm9ncmFtbWluZyBsYW5ndWFnZXMgY29tbW9ubHkgZGVmaW5lIHN0YW5kYXJkIG1lbWJlcnMgdG8gZW1pdCBldmVudHMgdG8gb3V0cHV0IChlLmcuLCAnb3V0JywgJ2NlcnInKS4iLAogICAgICAgICAgIml0ZW1zIiA6IHsKICAgICAgICAgICAgInR5cGUiIDogInN0cmluZyIKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH0KICB9LAogICJhZGRpdGlvbmFsUHJvcGVydGllcyIgOiBmYWxzZQp9
# 🔟❎ 'compile' log methods configuration
# Set the 10x pipeline to 'compile'
tenx: compile
# ============================ Log Options =============================
log:
# 'methods' lists known method names collected from common logging
# frameworks used to indicate source code logging events to stream at runtime.
# Identifying those points in source code that perform logging operations
# and marking them within an output symbol unit file (*.json)
# allows the 'run' pipeline to correlate each TenXObject structured from the event
# data back to its origin in the codebase.
# To learn more about symbol contexts and their use, see https://doc.log10x.com/run/transform/symbol/#contexts
methods:
# Assertions are not enabled by default as they are less likely to appear in prod logs
# - Assert
# - assert
# - assertEquals
# - assertEqual
- exception
- Log
- LOG
- log
- BOOST_LOG_TRIVIAL
- trace
- Trace
- log_trace
- logTrace
- TRACE
- LOG_TRACE
- debug
- Debug
- logDebug
- log_debug
- DEBUG
- LOG_DEBUG
- Debugf
- info
- Info
- log_info
- logInfo
- INFO
- LOG_INFO
- information
- LogInformation
- InfoF
- warn
- Warn
- log_warn
- logWarn
- WARN
- LOG_WARN
- WarnF
- warning
- logWarning
- LOG_WARNING
- error
- Error
- logError
- log_error
- ERROR
- LOG_ERROR
- ErrorF
- err
- fatal
- Fatal
- log_fatal
- logFatal
- FATAL
- LOG_FATAL
- FatalF
- critical
- Panic
# 'methodRegex' specifies an optional regex that will be applied
# to a scanned source code method/function name. If matched, the method
# will be considered to be a 'logging method' (see above).
# For example: ^(log|Log)|(Log|log)$
methodRegex: null
# 'streams' defines which source code variables within
# this ANTLR syntax are treated as output streams (e.g. stdout, stderr, cerr).
# Literal constants (e.g. "error connecting to {}") passed to a variable
# listed below (e.g. 'cout') will be assigned a 'logger_method_invoke'
# symbol source context.
streams:
# - assert
- cout
- cerr
- Error
- Debug
- err
- out
- Console
Go
Configure the ANTLR scanner to extract symbols from any programming language using the ANTLR framework.
Below is the default configuration from: antlr/go.yaml.
ewogICJ0eXBlIiA6ICJvYmplY3QiLAogICJwcm9wZXJ0aWVzIiA6IHsKICAgICJ0ZW54IiA6IHsKICAgICAgInR5cGUiIDogInN0cmluZyIKICAgIH0sCiAgICAiYW50bHJQYXJzZVVuaXRUaW1lb3V0IiA6IHsKICAgICAgInR5cGUiIDogWyAic3RyaW5nIiwgIm51bGwiIF0sCiAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJTb3VyY2UgZmlsZSBwYXJzZSB0aW1lb3V0XG5cbkRlZmluZXMgdGhlIHRpbWVvdXQgaW50ZXJ2YWwgZm9yIHBhcnNpbmcgYW5kIHNjYW5uaW5nIGEgc291cmNlL2JpbmFyeSBpbnB1dCBmaWxlIGJlZm9yZSBhYm9ydGluZy4gZGVmYXVsdCB2YWx1ZTogNjBzZWMiCiAgICB9CiAgfSwKICAiYWRkaXRpb25hbFByb3BlcnRpZXMiIDogZmFsc2UKfQ==
# 🔟❎ 'compile' Go ANTLR symbol scanner configuration
# The 'go' configuration instructs the ANTLR scanner which symbol values (e.g. class/func names, code constants)
# to extract from GO source files.
# Set the 10x pipeline to 'compile'
tenx: compile
# ============================== ANTLR Options ================================
antlr:
# The 'antlrLang' module is defined in: https://doc.log10x.com/compile/scanner/antlr/langs
# These values define the ANTLR-generated parser class used to
# to tokenize and construct an AST for the target go file.
lang: go
fileExt:
- .go
parserClass: com.log10x.antlr.generated.golang.GoParser
lexerClass: com.log10x.antlr.generated.golang.GoLexer
rootRule: sourceFile
reserved:
- package
- func
# 'lineFilters' specifies a list of regex patterns for skipping input lines
lineFilters:
- ^\s*(//.*|/\*.*\*/)$
# The 'rule' list defines the nodes within a go AST tree that are captured
# and added to the output symbol unit.
# To learn more see: https://doc.log10x.com/compile/scanner/antlr/rules/
rule:
- name: constSpec
lang: go
context: enum
recursive: false
capture: allSymbols
subRule: identifierList
- name: returnStmt
lang: go
context: var_assign
recursive: true
capture: literalsOnly
- name: assignment
lang: go
context: var_assign
recursive: true
capture: literalsOnly
- name: expressionStmt
lang: go
context: method_invoke
recursive: true
capture: literalsOnly
- name: packageClause
lang: go
context: package
recursive: false
capture: allSymbols
- name: arguments
lang: go
context: method_invoke
recursive: true
capture: literalsOnly
- name: typeSpec
lang: go
context: class
recursive: false
capture: allSymbols
- name: functionDecl
lang: go
context: method_decl
recursive: false
capture: allSymbols
- name: methodDecl
lang: go
context: method_decl
recursive: false
capture: allSymbols
Jackson
Configure Text file scanners to scan text/binary files for symbol values using the Jackson library.
Below is the default configuration from: text/jackson.yaml.
ewogICJ0eXBlIiA6ICJvYmplY3QiLAogICJwcm9wZXJ0aWVzIiA6IHsKICAgICJ0ZW54IiA6IHsKICAgICAgInR5cGUiIDogInN0cmluZyIKICAgIH0sCiAgICAidGV4dCIgOiB7CiAgICAgICJ0eXBlIiA6ICJhcnJheSIsCiAgICAgICJpdGVtcyIgOiB7CiAgICAgICAgInR5cGUiIDogIm9iamVjdCIsCiAgICAgICAgImFkZGl0aW9uYWxQcm9wZXJ0aWVzIiA6IGZhbHNlLAogICAgICAgICJwcm9wZXJ0aWVzIiA6IHsKICAgICAgICAgICJwYXJzZXJOYW1lIiA6IHsKICAgICAgICAgICAgInR5cGUiIDogWwogICAgICAgICAgICAgICJzdHJpbmciLAogICAgICAgICAgICAgICJudWxsIgogICAgICAgICAgICBdLAogICAgICAgICAgICAibWFya2Rvd25EZXNjcmlwdGlvbiIgOiAiUGFyc2VyIGxvZ2ljYWwgbmFtZVxuXG5EZWZpbmVzIGEgbG9naWNhbCB1bmlxdWUgbmFtZSBmb3IgdGhpcyBwYXJzZXIgKGUuZy4sICdsb2dzJykiCiAgICAgICAgICB9LAogICAgICAgICAgImZpbGVOYW1lRmlsdGVyIiA6IHsKICAgICAgICAgICAgInR5cGUiIDogWwogICAgICAgICAgICAgICJzdHJpbmciLAogICAgICAgICAgICAgICJudWxsIgogICAgICAgICAgICBdLAogICAgICAgICAgICAibWFya2Rvd25EZXNjcmlwdGlvbiIgOiAiUGF0dGVybiB0byBtYXRjaCBmb3IgdGFyZ2V0IGlucHV0IGZpbGUgbmFtZVxuXG5EZWZpbmVzIGEgcmVnZXggcGF0dGVybiBhIGZpbGUgbXVzdCBtYXRjaCBhZ2FpbnN0IGZvciB0aGlzIHNjYW5uZXIgdG8gYXBwbHkgdG8gaXQuIgogICAgICAgICAgfSwKICAgICAgICAgICJwYXJzZXJGYWN0b3J5Q2xhc3MiIDogewogICAgICAgICAgICAidHlwZSIgOiBbCiAgICAgICAgICAgICAgInN0cmluZyIsCiAgICAgICAgICAgICAgIm51bGwiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJQYXJzZXIgZmFjdG9yeSBjbGFzc1xuXG5Qcm92aWRlcyBhbiBvcHRpb25hbCBmdWxseSBxdWFsaWZpZWQgbmFtZSBvZiBhIGNsYXNzIG5hbWUgZGVyaXZlZCBmcm9tIGEgW0pzb25GYWN0b3J5XShodHRwczovL2Zhc3RlcnhtbC5naXRodWIuaW8vamFja3Nvbi1jb3JlL2phdmFkb2MvMi42L2NvbS9mYXN0ZXJ4bWwvamFja3Nvbi9jb3JlL0pzb25GYWN0b3J5Lmh0bWwpLiAgSWYgc3BlY2lmaWVkLCB0aGUgc2Nhbm5lciBpbnN0YW50aWF0ZXMgdGhlIGZhY3RvcnkgdXNpbmcgYSBwYXJhbWV0ZXJsZXNzIGNvbnN0cnVjdG9yICBhbmQgaW52b2tlcyBpdHMgW2NyZWF0ZVBhcnNlcl0oaHR0cHM6Ly9mYXN0ZXJ4bWwuZ2l0aHViLmlvL2phY2tzb24tY29yZS9qYXZhZG9jLzIuNi9jb20vZmFzdGVyeG1sL2phY2tzb24vY29yZS9Kc29uRmFjdG9yeS5odG1sI2NyZWF0ZVBhcnNlcihqYXZhLmlvLklucHV0U3RyZWFtKSkgbWV0aG9kIHRvIGdlbmVyYXRlIGEgcGFyc2VyIGluc3RhbmNlLiBUaGUgc2Nhbm5lciB1c2VzIHRoZSBwYXJzZXIgdG8gcmVhZCB0b2tlbiB2YWx1ZXMgZnJvbSB0aGUgZmlsZS4gIGlmICd0ZXh0UGFyc2VyRmFjdG9yeUFyZ3MnIGlzIHNwZWNpZmllZCwgYSBjb25zdHJ1Y3RvciByZWNlaXZpbmcgYSBzdHJpbmdbXSBtdXN0ICBiZSBkZWZpbmVkIGJ5IHRoaXMgY2xhc3MgdG8gcmVjZWl2ZSBvcHRpb25hbCBjb25maWcgcGFyYW1ldGVycyIKICAgICAgICAgIH0sCiAgICAgICAgICAicGFyc2VyRmFjdG9yeUFyZ3MiIDogewogICAgICAgICAgICAidHlwZSIgOiBbCiAgICAgICAgICAgICAgImFycmF5IiwKICAgICAgICAgICAgICAibnVsbCIKICAgICAgICAgICAgXSwKICAgICAgICAgICAgIm1hcmtkb3duRGVzY3JpcHRpb24iIDogIkFyZ3VtZW50cyBmb3IgJ3RleHRQYXJzZXJGYWN0b3J5JyBjdG9yXG5cblNwZWNpZmllcyBhcmd1bWVudHMgdG8gcGFzcyB0byB0aGUgcGFyc2VyIGZhY3RvcnkgaW5zdGFuY2UgY29uc3RydWN0b3IuIFRoaXMgb3B0aW9uIG9ubHkgYXBwbGllcyBpZiAndGV4dFBhcnNlckZhY3RvcnlDbGFzcycgaXMgc2V0LiIsCiAgICAgICAgICAgICJpdGVtcyIgOiB7CiAgICAgICAgICAgICAgInR5cGUiIDogInN0cmluZyIKICAgICAgICAgICAgfQogICAgICAgICAgfSwKICAgICAgICAgICJzY2FuRmllbGRWYWx1ZXMiIDogewogICAgICAgICAgICAidHlwZSIgOiBbCiAgICAgICAgICAgICAgImJvb2xlYW4iLAogICAgICAgICAgICAgICJzdHJpbmciCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJDb250cm9scyB3aGV0aGVyIHRvIGNhcHR1cmUgSmFja3NvbiBwYXJzZXIgZmllbGQgdmFsdWVzXG5cbkNvbnRyb2xzIHdoZXRoZXIgdG8gY2FwdHVyZSBhIEphY2tzb24gcGFyc2VyJ3MgW1ZBTFVFX1NUUklOR10oaHR0cHM6Ly9mYXN0ZXJ4bWwuZ2l0aHViLmlvL2phY2tzb24tY29yZS9qYXZhZG9jLzIuOC9jb20vZmFzdGVyeG1sL2phY2tzb24vY29yZS9Kc29uVG9rZW4uaHRtbCNWQUxVRV9TVFJJTkcpIHRva2VucyBhcmUgc2Nhbm5lZCBmb3IgZW50cmllcyBvciBqdXN0IHZhbHVlcyBvZiBbRklFTERfTkFNRV0oaHR0cHM6Ly9mYXN0ZXJ4bWwuZ2l0aHViLmlvL2phY2tzb24tY29yZS9qYXZhZG9jLzIuOC9jb20vZmFzdGVyeG1sL2phY2tzb24vY29yZS9Kc29uVG9rZW4uaHRtbCNGSUVMRF9OQU1FKSB0b2tlbnMuICAgIFRoaXMgb3B0aW9uIG9ubHkgYXBwbGllcyBpZiAndGV4dFBhcnNlckZhY3RvcnlDbGFzcycgaXMgc2V0LiAoQWNjZXB0cyBib29sZWFuIG9yIHN0cmluZyB3aXRoICQ9IHByZWZpeCBmb3IgcnVudGltZSBldmFsdWF0aW9uKSIKICAgICAgICAgIH0sCiAgICAgICAgICAibWF4TGluZXMiIDogewogICAgICAgICAgICAidHlwZSIgOiBbCiAgICAgICAgICAgICAgIm51bWJlciIsCiAgICAgICAgICAgICAgInN0cmluZyIKICAgICAgICAgICAgXSwKICAgICAgICAgICAgIm1hcmtkb3duRGVzY3JpcHRpb24iIDogIk1heCBudW1iZXIgb2YgbGluZXMgdG8gc2NhblxuXG5Db250cm9scyB0aGUgbWF4aW11bSBudW1iZXIgb2YgbGluZXMgdG8gc2NhbiBmb3Igc3ltYm9sIHZhbHVlcyBmcm9tIHRoZSBpbnB1dCBmaWxlLiBUaGlzIG9wdGlvbiBpcyB1c2VmdWwgd2hlbiBzY2FubmluZyBleGlzdGluZyBsb2cgZmlsZXMgYXMgJ3RlbXBsYXRlcycgZm9yIHBhcnNpbmcgZnV0dXJlIGxvZ3MgZnJvbSBhIHNpbWlsYXIgaW5wdXQgc3RyZWFtLiAoQWNjZXB0cyBudW1iZXIgb3Igc3RyaW5nIHdpdGggJD0gcHJlZml4IGZvciBydW50aW1lIGV2YWx1YXRpb24pIgogICAgICAgICAgfSwKICAgICAgICAgICJsaW5lT2Zmc2V0IiA6IHsKICAgICAgICAgICAgInR5cGUiIDogWwogICAgICAgICAgICAgICJudW1iZXIiLAogICAgICAgICAgICAgICJzdHJpbmciCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJMaW5lIG51bWJlciBmcm9tIHdoaWNoIHRvIHN0YXJ0IHNjYW5cblxuU3BlY2lmaWVzIHRoZSBsaW5lIG51bWJlciBmcm9tIHdoaWNoIHRvIHN0YXJ0IHNjYW5uaW5nIGZvciBzeW1ib2xzLiBUaGlzIG9wdGlvbiBpcyB1c2VmdWwgd2hlbiBzY2FubmluZyBhIHNwZWNpZmljIHBvcnRpb24gb2YgYSB0ZXh0IGZpbGUuIChBY2NlcHRzIG51bWJlciBvciBzdHJpbmcgd2l0aCAkPSBwcmVmaXggZm9yIHJ1bnRpbWUgZXZhbHVhdGlvbikiCiAgICAgICAgICB9LAogICAgICAgICAgImFsbG93RGlnaXRzIiA6IHsKICAgICAgICAgICAgInR5cGUiIDogWwogICAgICAgICAgICAgICJib29sZWFuIiwKICAgICAgICAgICAgICAic3RyaW5nIgogICAgICAgICAgICBdLAogICAgICAgICAgICAibWFya2Rvd25EZXNjcmlwdGlvbiIgOiAiQ29udHJvbHMgd2hldGhlciB0byBjYXB0dXJlIHRva2VucyBjb250YWluaW5nIG51bWVyaWMgYXMgc3ltYm9sIHRva2Vuc1xuXG5Db250cm9scyB3aGV0aGVyIHRva2VucyBjb250YWluIG51bWVyaWMgY2hhcnMgKGUuZy4sIDAtOSkgYXJlIGFjY2VwdGVkIGFzIHN5bWJvbCB0b2tlbnMuIEFzIGFscGhhbnVtZXJpYyBjb21iaW5hdGlvbnMgdGVuZCB0byBoYXZlIGhpZ2ggY2FyZGluYWxpdHkgKGUuZy4sIEdVSUQsIHRyYWNlX2lkKSwgaXQgaXMgbm90IGdlbmVyYWxseSBhZHZpc2VkICB0byBhZGQgdGhlbSB0byBzeW1ib2wgdW5pdHMgdW5sZXNzIHNwZWNpZmljYWxseSBrbm93biB0byBiZSAnY29uc3RhbnQnIC8gbG93IGNhcmRpbmFsaXR5IHZhbHVlcyAoQWNjZXB0cyBib29sZWFuIG9yIHN0cmluZyB3aXRoICQ9IHByZWZpeCBmb3IgcnVudGltZSBldmFsdWF0aW9uKSIKICAgICAgICAgIH0sCiAgICAgICAgICAibWluTGVuZ3RoIiA6IHsKICAgICAgICAgICAgInR5cGUiIDogWwogICAgICAgICAgICAgICJudW1iZXIiLAogICAgICAgICAgICAgICJzdHJpbmciCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJNaW4gY2hhcmFjdGVyIGxlbmd0aCBmb3IgYSB0b2tlbiB0byBiZSBjb25zaWRlcmVkIGEgc3ltYm9sIHZhbHVlXG5cblNldHMgdGhlIG1pbmltYWwgY2hhcmFjdGVyIGxlbmd0aCBhIHRva2VuIG11c3QgaGF2ZSB0byBjb25zdGl0dXRlIGEgc3ltYm9sIHZhbHVlLiBWZXJ5IHNob3J0IHRva2VucyAoZS5nLiwgbGVuIDwgMykgaGF2ZSBhIGhpZ2ggcHJvYmFiaWxpdHkgb2YgYmVpbmcgZHluYW1pYyB2YWx1ZXMgd2l0aCBoaWdoIGNhcmRpbmFsaXR5IGFuZCwgYXMgc3VjaCwgc2hvdWxkIG5vdCAgYmUgY2FwdHVyZWQgYXMgc3ltYm9sIHZhbHVlcy4gKEFjY2VwdHMgbnVtYmVyIG9yIHN0cmluZyB3aXRoICQ9IHByZWZpeCBmb3IgcnVudGltZSBldmFsdWF0aW9uKSIKICAgICAgICAgIH0sCiAgICAgICAgICAibWF4TGVuZ3RoIiA6IHsKICAgICAgICAgICAgInR5cGUiIDogWwogICAgICAgICAgICAgICJudW1iZXIiLAogICAgICAgICAgICAgICJzdHJpbmciCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJNYXggY2hhcmFjdGVyIGxlbmd0aCBmb3IgYSB0b2tlbiB0byBiZSBjb25zaWRlcmVkIGEgc3ltYm9sIHZhbHVlXG5cblNldHMgdGhlIG1heGltdW0gY2hhcmFjdGVyIGxlbmd0aCBhIHRva2VuIG11c3QgaGF2ZSB0byBjb25zdGl0dXRlIGEgc3ltYm9sIHZhbHVlLiBWZXJ5IGxvbmcgdG9rZW5zIChlLmcuLCBsZW4gPiAxMDApIGhhdmUgYSBoaWdoIHByb2JhYmlsaXR5IG9mIGJlaW5nIGR5bmFtaWMgdmFsdWVzIHdpdGggaGlnaCBjYXJkaW5hbGl0eSBhbmQsIGFzIHN1Y2gsIHNob3VsZCBub3QgIGJlIGNhcHR1cmVkIGFzIHN5bWJvbCB2YWx1ZXMuIChBY2NlcHRzIG51bWJlciBvciBzdHJpbmcgd2l0aCAkPSBwcmVmaXggZm9yIHJ1bnRpbWUgZXZhbHVhdGlvbikiCiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICAicmVxdWlyZWQiIDogWwogICAgICAgICAgInBhcnNlck5hbWUiLAogICAgICAgICAgImZpbGVOYW1lRmlsdGVyIgogICAgICAgIF0KICAgICAgfQogICAgfQogIH0sCiAgImFkZGl0aW9uYWxQcm9wZXJ0aWVzIiA6IGZhbHNlCn0=
# 🔟❎ 'compile' text symbol scanner configuration
# The 'text' scanner parses text files for symbol values. It utilizes
# the Jackson parser library to parse any text/binary format it supports.
# This includes formats such json, yaml, xml, ini, protobuf and more.
# The configuration below is added by default to the 10x 'compile' pipeline.
# Even so, if another text scanner is defined via the 'textScanners' options group
# whose 'fileNameFilter' matches that of the current target input file,
# it will take precedence over the text scanners defined below.
# To learn more about text scanner options below, see:
# https://doc.log10x.com/compile/scanner/text
# Set the 10x pipeline to 'compile'
tenx: compile
# =============================== Text Options ================================
text:
- parserName: text
fileNameFilter: '^.*\.(csv|txt|properties|csv|tsv|ini|conf|sh|log|out)$'
maxLines: 500
lineOffset: 0
allowDigits: false
minLength: 2
maxLength: 50
- parserName: json
fileNameFilter: '^.*\.(json)$'
parserFactoryClass: com.fasterxml.jackson.core.JsonFactory
scanFieldValues: true
- parserName: yaml
fileNameFilter: '^.*\.(yml|yaml)$'
parserFactoryClass: com.log10x.eng.scanner.text.TextYamlFactory
scanFieldValues: true
- parserName: xml
fileNameFilter: '^.*\.(xml|xsd)$'
parserFactoryClass: com.fasterxml.jackson.dataformat.xml.XmlFactory
scanFieldValues: true
Java
Configure the ANTLR scanner to extract symbols from any programming language using the ANTLR framework.
Below is the default configuration from: antlr/java.yaml.
ewogICJ0eXBlIiA6ICJvYmplY3QiLAogICJwcm9wZXJ0aWVzIiA6IHsKICAgICJ0ZW54IiA6IHsKICAgICAgInR5cGUiIDogInN0cmluZyIKICAgIH0sCiAgICAiYW50bHJQYXJzZVVuaXRUaW1lb3V0IiA6IHsKICAgICAgInR5cGUiIDogWyAic3RyaW5nIiwgIm51bGwiIF0sCiAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJTb3VyY2UgZmlsZSBwYXJzZSB0aW1lb3V0XG5cbkRlZmluZXMgdGhlIHRpbWVvdXQgaW50ZXJ2YWwgZm9yIHBhcnNpbmcgYW5kIHNjYW5uaW5nIGEgc291cmNlL2JpbmFyeSBpbnB1dCBmaWxlIGJlZm9yZSBhYm9ydGluZy4gZGVmYXVsdCB2YWx1ZTogNjBzZWMiCiAgICB9CiAgfSwKICAiYWRkaXRpb25hbFByb3BlcnRpZXMiIDogZmFsc2UKfQ==
# 🔟❎ 'compile' Java ANTLR symbol scanner configuration
# The 'java' configuration instructs the ANTLR scanner which symbol values (e.g. class/func names, code constants)
# to extract from Java source files.
# IMPORTANT: while set to enabled by default, the dedicated java scanner utilizes
# takes precedence over this scanner unless disabled.
# To learn more see https://doc.log10x.com/compile/scanner/javaParser
# Set the 10x pipeline to 'compile'
tenx: compile
# ============================== ANTLR Options ================================
antlr:
# The 'antlrLang' module is defined in: https://doc.log10x.com/compile/scanner/antlr/langs
# These values define the ANTLR-generated parser class used to
# to tokenize and construct an AST for the target Java file.
lang: java
fileExt:
- .java
parserClass: com.log10x.antlr.generated.java.Java9Parser
lexerClass: com.log10x.antlr.generated.java.Java9Lexer
rootRule: compilationUnit
reserved:
- package
- interface
- class
- enum
# 'lineFilters' specifies a list of regex patterns for skipping input lines
lineFilters:
- ^\s*(//.*|/\*.*\*/)$
# The 'rule' list defines the nodes within a Java AST tree that are captured
# and added to the output symbol unit.
# To learn more see: https://doc.log10x.com/compile/scanner/antlr/rules/
rule:
- name: packageDeclaration
lang: java
context: package
recursive: false
capture: allSymbols
- name: methodInvocation
lang: java
context: method_invoke
recursive: true
capture: literalsOnly
- name: enumDeclaration
lang: java
context: class
recursive: false
capture: allSymbols
- name: annotation
lang: java
context: annotation_invoke
recursive: true
capture: literalsOnly
- name: normalClassDeclaration
lang: java
context: class
recursive: false
capture: allSymbols
- name: variableInitializer
lang: java
context: var_assign
recursive: true
capture: literalsOnly
- name: enumConstant
lang: java
context: enum
recursive: false
capture: allSymbols
- name: returnStatement
lang: java
context: var_assign
recursive: true
capture: literalsOnly
- name: methodDeclaration
lang: java
context: method_decl
recursive: false
capture: literalsOnly
- name: argumentList
lang: java
context: method_invoke
recursive: true
capture: literalsOnly
- name: methodInvocation_lfno_primary
lang: java
context: method_invoke
recursive: true
capture: literalsOnly
- name: methodDeclarator
lang: java
context: method_decl
recursive: false
capture: allSymbols
- name: methodInvocation_lf_primary
lang: java
context: method_invoke
recursive: true
capture: literalsOnly
- name: normalInterfaceDeclaration
lang: java
context: class
recursive: false
capture: allSymbols
Javascript
Configure the ANTLR scanner to extract symbols from any programming language using the ANTLR framework.
Below is the default configuration from: antlr/javascript.yaml.
ewogICJ0eXBlIiA6ICJvYmplY3QiLAogICJwcm9wZXJ0aWVzIiA6IHsKICAgICJ0ZW54IiA6IHsKICAgICAgInR5cGUiIDogInN0cmluZyIKICAgIH0sCiAgICAiYW50bHJQYXJzZVVuaXRUaW1lb3V0IiA6IHsKICAgICAgInR5cGUiIDogWyAic3RyaW5nIiwgIm51bGwiIF0sCiAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJTb3VyY2UgZmlsZSBwYXJzZSB0aW1lb3V0XG5cbkRlZmluZXMgdGhlIHRpbWVvdXQgaW50ZXJ2YWwgZm9yIHBhcnNpbmcgYW5kIHNjYW5uaW5nIGEgc291cmNlL2JpbmFyeSBpbnB1dCBmaWxlIGJlZm9yZSBhYm9ydGluZy4gZGVmYXVsdCB2YWx1ZTogNjBzZWMiCiAgICB9CiAgfSwKICAiYWRkaXRpb25hbFByb3BlcnRpZXMiIDogZmFsc2UKfQ==
# 🔟❎ 'compile' JavaScript ANTLR symbol scanner configuration
# The 'javascript' configuration instructs the ANTLR scanner which symbol values (e.g. class/func names, code constants)
# to extract from JavaScript source files.
# Set the 10x pipeline to 'compile'
tenx: compile
# ============================== ANTLR Options ================================
antlr:
# The 'antlrLang' module is defined in: https://doc.log10x.com/compile/scanner/antlr/langs
# These values define the ANTLR-generated parser class used to
# to tokenize and construct an AST for the target JavaScript file.
lang: javascript
fileExt:
- .js
parserClass: com.log10x.antlr.parsers.JavaScriptDecoratedParser
lexerClass: com.log10x.antlr.generated.javascript.JavaScriptLexer
rootRule: program2
reserved:
- function
- constructor
- class
maxLineLength: 4096
# 'lineFilters' specifies a list of regex patterns for skipping input lines
lineFilters:
- ^\s*(//.*|/\*.*\*/)$
# The 'rule' list defines the nodes within a js AST tree that are captured
# and added to the output symbol unit.
# To learn more see: https://doc.log10x.com/compile/scanner/antlr/rules/
rule:
- name: functionDeclaration
lang: javascript
context: method_decl
recursive: false
capture: allSymbols
subRule: identifier
- name: returnStatement
lang: javascript
context: var_assign
recursive: true
capture: literalsOnly
- name: classDeclaration
lang: javascript
context: class
recursive: false
capture: allSymbols
subRule: identifier
- name: methodDefinition
lang: javascript
context: method_decl
recursive: true
capture: allSymbols
subRule: identifier
- name: formalParameterList
lang: javascript
context: method_decl
recursive: false
capture: literalsOnly
- name: functionBody
lang: javascript
context: method_invoke
recursive: false
capture: literalsOnly
- name: functionDecl
lang: javascript
context: method_decl
recursive: false
capture: allSymbols
- name: anoymousFunctionDecl
lang: javascript
context: method_decl
recursive: false
capture: allSymbols
- name: argumentsExpression
lang: javascript
context: method_invoke
recursive: true
capture: literalsOnly
- name: variableDeclaration
lang: javascript
context: var_assign
recursive: true
capture: literalsOnly
- name: assignmentExpression
lang: javascript
context: var_assign
recursive: true
capture: literalsOnly
Python
Configure the ANTLR scanner to extract symbols from any programming language using the ANTLR framework.
Below is the default configuration from: antlr/python.yaml.
ewogICJ0eXBlIiA6ICJvYmplY3QiLAogICJwcm9wZXJ0aWVzIiA6IHsKICAgICJ0ZW54IiA6IHsKICAgICAgInR5cGUiIDogInN0cmluZyIKICAgIH0sCiAgICAiYW50bHJQYXJzZVVuaXRUaW1lb3V0IiA6IHsKICAgICAgInR5cGUiIDogWyAic3RyaW5nIiwgIm51bGwiIF0sCiAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJTb3VyY2UgZmlsZSBwYXJzZSB0aW1lb3V0XG5cbkRlZmluZXMgdGhlIHRpbWVvdXQgaW50ZXJ2YWwgZm9yIHBhcnNpbmcgYW5kIHNjYW5uaW5nIGEgc291cmNlL2JpbmFyeSBpbnB1dCBmaWxlIGJlZm9yZSBhYm9ydGluZy4gZGVmYXVsdCB2YWx1ZTogNjBzZWMiCiAgICB9CiAgfSwKICAiYWRkaXRpb25hbFByb3BlcnRpZXMiIDogZmFsc2UKfQ==
# 🔟❎ 'compile' Python symbol scanner configuration
# The 'python' configuration instructs the ANTLR scanner which symbol values (e.g. class/func names, code constants)
# to extract from Python source files.
# NOTE: while set to enabled by default, the 'pythonAST' scanner which utilizes
# the python run-time's built-in AST parser takes precedence over this scanner
# unless a python run-time is not installed or the 'pythonAST' scanner is disabled.
# To learn see https://doc.log10x.com/compile/scanner/pythonAST
# Set the 10x pipeline to 'compile'
tenx: compile
# ============================== ANTLR Options ================================
antlr:
# The 'antlrLang' module is defined in: https://doc.log10x.com/compile/scanner/antlr/langs
# These values define the ANTLR-generated parser class used to
# to tokenize and construct an AST for the target Python file.
lang: python
fileExt:
- .py
parserClass: com.log10x.antlr.generated.python.PythonParser
lexerClass: com.log10x.antlr.generated.python.PythonLexer
rootRule: root
reserved:
- def
- __str__
- __init__
- class
# 'lineFilters' specifies a list of regex patterns for skipping input lines
lineFilters:
- ^\s*(//.*|/\*.*\*/)$
# The 'rule' list defines the nodes within a Python AST tree that are captured
# and added to the output symbol unit.
# To learn more see: https://doc.log10x.com/compile/scanner/antlr/rules/
rule:
- name: classdef
lang: python
context: class
recursive: false
capture: allSymbols
subRule: name
condition: (^Enum$|^enum$)
tag: enumLiteral
- name: testlist_star_expr
lang: python
context: enum
recursive: true
capture: allSymbolsIfMatchCond
ifTag: enumLiteral
- name: trailer
lang: python
context: method_invoke
recursive: true
capture: literalsOnly
subRule: name
- name: return_stmt
lang: python
context: var_assign
recursive: true
capture: literalsOnly
- name: decorator
lang: python
context: annotation_invoke
recursive: true
capture: literalsOnly
subRule: arglist
- name: arglist
lang: python
context: method_invoke
recursive: true
capture: literalsOnly
- name: funcdef
lang: python
context: method_decl
recursive: false
capture: allSymbols
subRule: name
- name: assign_part
lang: python
context: var_assign
recursive: true
capture: literalsOnly
- name: dictorsetmaker
lang: python
context: var_assign
recursive: true
capture: literalsOnly
Scala
Configure the ANTLR scanner to extract symbols from any programming language using the ANTLR framework.
Below is the default configuration from: antlr/scala.yaml.
ewogICJ0eXBlIiA6ICJvYmplY3QiLAogICJwcm9wZXJ0aWVzIiA6IHsKICAgICJ0ZW54IiA6IHsKICAgICAgInR5cGUiIDogInN0cmluZyIKICAgIH0sCiAgICAiYW50bHJQYXJzZVVuaXRUaW1lb3V0IiA6IHsKICAgICAgInR5cGUiIDogWyAic3RyaW5nIiwgIm51bGwiIF0sCiAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJTb3VyY2UgZmlsZSBwYXJzZSB0aW1lb3V0XG5cbkRlZmluZXMgdGhlIHRpbWVvdXQgaW50ZXJ2YWwgZm9yIHBhcnNpbmcgYW5kIHNjYW5uaW5nIGEgc291cmNlL2JpbmFyeSBpbnB1dCBmaWxlIGJlZm9yZSBhYm9ydGluZy4gZGVmYXVsdCB2YWx1ZTogNjBzZWMiCiAgICB9CiAgfSwKICAiYWRkaXRpb25hbFByb3BlcnRpZXMiIDogZmFsc2UKfQ==
# 🔟❎ 'compile' Scala symbol scanner configuration
# The 'scala' configuration instructs the ANTLR scanner which symbol values (e.g. class/func names, code constants)
# to extract from Scala source files.
# IMPORTANT: while set to enabled by default, the dedicated scala scanner utilizes
# takes precedence over this scanner unless disabled.
# To learn more see https://doc.log10x.com/compile/scanner/scalameta
# Set the 10x pipeline to 'compile'
tenx: compile
# ============================== ANTLR Options ================================
antlr:
# The 'antlrLang' module is defined in: https://doc.log10x.com/compile/scanner/antlr/langs
# These values define the ANTLR grammar .g4 file used to
# to tokenize and construct an AST for the target .Scala file.
lang: scala
fileExt:
- .scala
- .sc
grammarFile: grammar/scala.g4
rootRule: compilationUnit
reserved:
- interface
- class
- enum
- this
# 'lineFilters' specifies a list of regex patterns for skipping input lines
lineFilters:
- ^\s*(//.*|/\*.*\*/)$
# The 'rule' list defines the nodes within a scala AST tree that are captured
# and added to the output symbol unit.
# To learn more see: https://doc.log10x.com/compile/scanner/antlr/rules/
rule:
- name: classParamClauses
lang: scala
context: class
recursive: false
capture: literalsOnly
- name: patVarDef
lang: scala
context: var_assign
recursive: true
capture: literalsOnly
- name: argumentExprs
lang: scala
context: method_invoke
recursive: true
capture: literalsOnly
- name: annotation
lang: scala
context: annotation_invoke
recursive: true
capture: literalsOnly
- name: objectDef
lang: scala
context: class
recursive: true
capture: allSymbols
- name: paramClauses
lang: scala
context: class
recursive: false
capture: literalsOnly
- name: classTemplateOpt
lang: scala
context: class
recursive: false
capture: literalsOnly
- name: funDcl
lang: scala
context: method_decl
recursive: false
capture: allSymbols
- name: classDef
lang: scala
context: class
recursive: true
capture: allSymbols
- name: qualId
lang: scala
context: package
recursive: true
capture: allSymbols
- name: traitDef
lang: scala
context: class
recursive: true
capture: allSymbols
- name: funDef
lang: scala
context: method_decl
recursive: true
capture: allSymbols
subRule: funSig
- name: type_
lang: scala
context: method_decl
recursive: false
capture: literalsOnly
- name: blockStat
lang: scala
context: var_assign
recursive: true
capture: literalsOnly
- name: templateStat
lang: scala
context: method_invoke
recursive: true
capture: literalsOnly
Strings-nix
Configure Executable scanners to launch a target process from which to read symbol values via its stdout.
Below is the default configuration from: executable/strings-nix.yaml.
ewogICJ0eXBlIiA6ICJvYmplY3QiLAogICJwcm9wZXJ0aWVzIiA6IHsKICAgICJ0ZW54IiA6IHsKICAgICAgInR5cGUiIDogInN0cmluZyIKICAgIH0sCiAgICAiZXhlYyIgOiB7CiAgICAgICJ0eXBlIiA6ICJhcnJheSIsCiAgICAgICJpdGVtcyIgOiB7CiAgICAgICAgInR5cGUiIDogIm9iamVjdCIsCiAgICAgICAgImFkZGl0aW9uYWxQcm9wZXJ0aWVzIiA6IGZhbHNlLAogICAgICAgICJwcm9wZXJ0aWVzIiA6IHsKICAgICAgICAgICJuYW1lIiA6IHsKICAgICAgICAgICAgInR5cGUiIDogWwogICAgICAgICAgICAgICJzdHJpbmciLAogICAgICAgICAgICAgICJudWxsIgogICAgICAgICAgICBdLAogICAgICAgICAgICAibWFya2Rvd25EZXNjcmlwdGlvbiIgOiAiQSBsb2dpY2FsIG5hbWUgZm9yIHRoaXMgZXhlYyBzY2FubmVyXG5cbkEgbG9naWNhbCBuYW1lIGZvciB0aGlzIGV4ZWMgc2Nhbm5lciB1bmlxdWUgYW1vbmdzdCBhbGwgc3BlY2lmaWVkIHNjYW5uZXIgb3B0aW9uIGdyb3VwcyAoZS5nLiwgJ3N0cmluZ3NOSVgnKSIKICAgICAgICAgIH0sCiAgICAgICAgICAib3NGaWx0ZXIiIDogewogICAgICAgICAgICAidHlwZSIgOiBbCiAgICAgICAgICAgICAgInN0cmluZyIsCiAgICAgICAgICAgICAgIm51bGwiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJBIHBhdHRlcm4gdGhhdCBtdXN0IG1hdGNoIHRoZSBuYW1lIG9mIHRoZSBob3N0IE9TIHRvIGFwcGx5IHRoaXMgc2Nhbm5lci5cblxuRGVmaW5lcyBhIHBhdHRlcm4gdG8gbWF0Y2ggYWdhaW5zdCB0aGUgbmFtZSBvZiB0aGUgaG9zdCBPUyB0byBkZXRlcm1pbmUgd2hldGhlciB0byBhcHBseSB0aGlzIHNjYW5uZXIuIgogICAgICAgICAgfSwKICAgICAgICAgICJleHRlbnNpb25zIiA6IHsKICAgICAgICAgICAgInR5cGUiIDogWwogICAgICAgICAgICAgICJhcnJheSIsCiAgICAgICAgICAgICAgIm51bGwiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJBIGxpc3Qgb2YgZmlsZSBleHRlbnNpb25zIGEgdGFyZ2V0IGZpbGUgbXVzdCBtYXRjaCB0byBhcHBseSB0aGlzIHNjYW5uZXJcblxuQW4gYXJyYXkgb2YgZmlsZSBleHRlbnNpb25zIHRvIHRlc3QgYSBmaWxlIGNhbmRpZGF0ZSBhZ2FpbnN0LiBJZiB0aGUgY2FuZGlkYXRlIG1hdGNoZXMgYW55IGV4dGVuc2lvbnMsIGFwcGx5IHRoaXMgc2Nhbm5lci4iLAogICAgICAgICAgICAiaXRlbXMiIDogewogICAgICAgICAgICAgICJ0eXBlIiA6ICJzdHJpbmciCiAgICAgICAgICAgIH0KICAgICAgICAgIH0sCiAgICAgICAgICAiZmlsZU5hbWVGaWx0ZXIiIDogewogICAgICAgICAgICAidHlwZSIgOiBbCiAgICAgICAgICAgICAgInN0cmluZyIsCiAgICAgICAgICAgICAgIm51bGwiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJBIHBhdHRlcm4gdGhhdCB0aGUgdGFyZ2V0IGlucHV0IGZpbGUgbXVzdCBtYXRjaCB0byBhcHBseSB0aGlzIHNjYW5uZXJcblxuU2V0cyBhIHJlZ2V4IHBhdHRlcm4gdG8gdGVzdCBhIGZpbGUgY2FuZGlkYXRlIG5hbWUgYWdhaW5zdC4gSWYgdGhlIGNhbmRpZGF0ZSBtYXRjaGVzIGFueSBvZiB0aGUgZXh0ZW5zaW9ucywgYXBwbHkgdGhpcyBzY2FubmVyLiIKICAgICAgICAgIH0sCiAgICAgICAgICAic2VsZWN0b3IiIDogewogICAgICAgICAgICAidHlwZSIgOiAib2JqZWN0IiwKICAgICAgICAgICAgImFkZGl0aW9uYWxQcm9wZXJ0aWVzIiA6IGZhbHNlLAogICAgICAgICAgICAicHJvcGVydGllcyIgOiB7CiAgICAgICAgICAgICAgInByb2Nlc3MiIDogewogICAgICAgICAgICAgICAgInR5cGUiIDogWwogICAgICAgICAgICAgICAgICAic3RyaW5nIiwKICAgICAgICAgICAgICAgICAgIm51bGwiCiAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgIm1hcmtkb3duRGVzY3JpcHRpb24iIDogIk5hbWUgb2YgYSBwcm9jZXNzIHRvIGxhdW5jaCB3aG9zZSBvdXRwdXQgd2hldGhlciB0byBhcHBseSB0aGlzIGlucHV0XG5cbkRlZmluZSBhIHByb2Nlc3MgbmFtZSB0byBsYXVuY2ggdG8gb2J0YWluIGluZm9ybWF0aW9uIGFib3V0IHRoZSBpbnB1dCBmaWxlLiBJbiBzb21lIE9TcyAoZS5nLiwgTGludXgvVW5peCksIGV4ZWN1dGFibGUgZmlsZXMgZG8gbm90IG5lY2Vzc2FyaWx5IGhhdmUgYSBrbm93biBleHRlbnNpb24uIEZvciB0aGlzLCBhbiBPUyB1dGlsaXR5IHN1Y2ggYXMgTklYIFtmaWxlXShodHRwczovL21hbjcub3JnL2xpbnV4L21hbi1wYWdlcy9tYW4xL2ZpbGUuMS5odG1sKSBjYW4gb2J0YWluIGluZm9ybWF0aW9uIG9uIHRoZSBhY3R1YWwgZmlsZSBjb250ZW50cy4gIElmIGEgc2VsZWN0b3IgcHJvY2VzcyBpcyBub3QgcHJvdmlkZWQgdGhlIGZpbGUncyBFTEYvUEUvT1NYIGJpbmFyeSBoZWFkZXIgaXMgdGVzdGVkIGZvciBhIHBvc3NpYmxlIG1hdGNoLiIKICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICJ3b3JrRGlyIiA6IHsKICAgICAgICAgICAgICAgICJ0eXBlIiA6IFsKICAgICAgICAgICAgICAgICAgInN0cmluZyIsCiAgICAgICAgICAgICAgICAgICJudWxsIgogICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJUaGUgcGF0aCBvZiB0aGUgd29ya2luZyBkaXJlY3Rvcnkgd2hlbiBydW5uaW5nICdleGVjU2VsZWN0b3JQcm9jZXNzJ1xuXG5EZWZpbmVzIHRoZSB3b3JraW5nIGRpcmVjdG9yeSB3aGVuIHJ1bm5pbmcgW2V4ZWNTZWxlY3RvclByb2Nlc3NdKGh0dHBzOi8vZG9jLmxvZzEweC5jb20vY29tcGlsZS9zY2FubmVyL2V4ZWN1dGFibGUvI2V4ZWNzZWxlY3RvcnByb2Nlc3MpLiBJZiBvbWl0dGVkLCB3aWxsIHVzZSB0aGUgdGhlIHdvcmtpbmcgZGlyZWN0b3J5LiIKICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICJhcmdzIiA6IHsKICAgICAgICAgICAgICAgICJ0eXBlIiA6IFsKICAgICAgICAgICAgICAgICAgImFycmF5IiwKICAgICAgICAgICAgICAgICAgIm51bGwiCiAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgIm1hcmtkb3duRGVzY3JpcHRpb24iIDogIkxpc3Qgb2YgYXJndW1lbnRzIHBhc3NlZCB0byAnZXhlY1NlbGVjdG9yUHJvY2VzcydcblxuRGVmaW5lcyBhcmd1bWVudHMgZm9yIHRoZSBzZWxlY3RvciBwcm9jZXNzLCBpZiBwcm92aWRlZC4gVGhlIGBmaWxlYCBtYWNybyB0YWtlcyB0aGUgdmFsdWUgb2YgdGhlIHRhcmdldCBleGVjIGZpbGUgdG8gbGF1bmNoLiIsCiAgICAgICAgICAgICAgICAiaXRlbXMiIDogewogICAgICAgICAgICAgICAgICAidHlwZSIgOiAic3RyaW5nIgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgInRpbWVvdXQiIDogewogICAgICAgICAgICAgICAgInR5cGUiIDogWwogICAgICAgICAgICAgICAgICAic3RyaW5nIiwKICAgICAgICAgICAgICAgICAgIm51bGwiCiAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgIm1hcmtkb3duRGVzY3JpcHRpb24iIDogIlRpbWVvdXQgcGVyaW9kIGFmdGVyIHdoaWNoIHRvIHRlcm1pbmF0ZSAnZXhlY1NlbGVjdG9yUHJvY2VzcyBwcm9jZXNzXG5cblNldHMgaG93IGxvbmcgdG8gYWxsb3cgdGhlIHNlbGVjdG9yIHByb2Nlc3MgdG8gcnVuIGJlZm9yZSB0ZXJtaW5hdGlvbiAoZS5nLiAnMTBzJykiCiAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAib3V0cHV0RmlsdGVyIiA6IHsKICAgICAgICAgICAgICAgICJ0eXBlIiA6IFsKICAgICAgICAgICAgICAgICAgInN0cmluZyIsCiAgICAgICAgICAgICAgICAgICJudWxsIgogICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJBIGZpbHRlciBwYXR0ZXJuIHRoYXQgbXVzdCBtYXRjaCB0aGUgb3V0cHV0IG9mICdleGVjU2VsZWN0b3JQcm9jZXNzJyB0byBhcHBseSB0aGlzIHNjYW5uZXJcblxuRGVmaW5lcyBhIHJlZ2V4IHBhdHRlcm4gdG8gbWF0Y2ggYWdhaW5zdCB0aGUgY29udGVudHMgb2YgdGhlIHN0ZG91dCBzdHJlYW0gcmVhZCBmcm9tIHRoZSBbZXhlY1NlbGVjdG9yUHJvY2Vzc10oaHR0cHM6Ly9kb2MubG9nMTB4LmNvbS9jb21waWxlL3NjYW5uZXIvZXhlY3V0YWJsZS8jZXhlY3NlbGVjdG9ycHJvY2VzcykgcHJvY2Vzcy4gSWYgbWF0Y2hlZCwgYXBwbHkgdGhpcyBzY2FubmVyIHRvIHRoZSBpbnB1dCBmaWxlLiIKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIH0sCiAgICAgICAgICAicHJvY2VzcyIgOiB7CiAgICAgICAgICAgICJ0eXBlIiA6IFsKICAgICAgICAgICAgICAic3RyaW5nIiwKICAgICAgICAgICAgICAibnVsbCIKICAgICAgICAgICAgXSwKICAgICAgICAgICAgIm1hcmtkb3duRGVzY3JpcHRpb24iIDogIlByb2Nlc3MgdG8gbGF1bmNoIGZvciBleHRyYWN0aW5nIHN5bWJvbCB2YWx1ZXNcblxuRGVmaW5lcyBhIHByb2Nlc3MgdG8gbGF1bmNoIGFuZCB3aG9zZSBzdGRvdXQgcGlwZSB0byBwYXJzZSBmb3Igc3ltYm9sIHZhbHVlcy4iCiAgICAgICAgICB9LAogICAgICAgICAgIndvcmtEaXIiIDogewogICAgICAgICAgICAidHlwZSIgOiBbCiAgICAgICAgICAgICAgInN0cmluZyIsCiAgICAgICAgICAgICAgIm51bGwiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJUaGUgcGF0aCBvZiB0aGUgd29ya2luZyBkaXJlY3Rvcnkgd2hlbiBydW5uaW5nICdleGVjUHJvY2VzcydcblxuRGVmaW5lcyB0aGUgd29ya2luZyBkaXJlY3Rvcnkgd2hlbiBydW5uaW5nIFtleGVjUHJvY2Vzc10oaHR0cHM6Ly9kb2MubG9nMTB4LmNvbS9jb21waWxlL3NjYW5uZXIvZXhlY3V0YWJsZS8jZXhlY3Byb2Nlc3MpLiBJZiBvbWl0dGVkLCB1c2VzIHRoZSB3b3JraW5nIGRpcmVjdG9yeS4iCiAgICAgICAgICB9LAogICAgICAgICAgImFyZ3MiIDogewogICAgICAgICAgICAidHlwZSIgOiBbCiAgICAgICAgICAgICAgImFycmF5IiwKICAgICAgICAgICAgICAibnVsbCIKICAgICAgICAgICAgXSwKICAgICAgICAgICAgIm1hcmtkb3duRGVzY3JpcHRpb24iIDogIkxpc3Qgb2YgYXJndW1lbnRzIHBhc3NlZCB0byAnZXhlY1Byb2Nlc3MnICgnZmlsZScgaXMgcmVwbGFjZWQgYnkgc2NhbiB0YXJnZXQpXG5cbkRlZmluZXMgbGF1bmNoIGFyZ3VtZW50cyBbZXhlY1Byb2Nlc3NdKGh0dHBzOi8vZG9jLmxvZzEweC5jb20vY29tcGlsZS9zY2FubmVyL2V4ZWN1dGFibGUvI2V4ZWNwcm9jZXNzKS4gVGhlIGBmaWxlYCBtYWNybyBleHBhbmRzIGludG8gdGhlIGlucHV0IGZpbGUgcGF0aCIsCiAgICAgICAgICAgICJpdGVtcyIgOiB7CiAgICAgICAgICAgICAgInR5cGUiIDogInN0cmluZyIKICAgICAgICAgICAgfQogICAgICAgICAgfSwKICAgICAgICAgICJ0aW1lb3V0IiA6IHsKICAgICAgICAgICAgInR5cGUiIDogWwogICAgICAgICAgICAgICJzdHJpbmciLAogICAgICAgICAgICAgICJudWxsIgogICAgICAgICAgICBdLAogICAgICAgICAgICAibWFya2Rvd25EZXNjcmlwdGlvbiIgOiAiVGltZW91dCBwZXJpb2QgYWZ0ZXIgd2hpY2ggdG8gdGVybWluYXRlICdleGVjUHJvY2VzcycgcHJvY2Vzc1xuXG5EZWZpbmVzIGhvdyBsb25nIFtleGVjUHJvY2Vzc10oaHR0cHM6Ly9kb2MubG9nMTB4LmNvbS9jb21waWxlL3NjYW5uZXIvZXhlY3V0YWJsZS8jZXhlY3Byb2Nlc3MpIGlzIGFsbG93ZWQgdG8gcnVuIGJlZm9yZSB0ZXJtaW5hdGlvbiIKICAgICAgICAgIH0sCiAgICAgICAgICAic3ltYm9sIiA6IHsKICAgICAgICAgICAgInR5cGUiIDogIm9iamVjdCIsCiAgICAgICAgICAgICJhZGRpdGlvbmFsUHJvcGVydGllcyIgOiBmYWxzZSwKICAgICAgICAgICAgInByb3BlcnRpZXMiIDogewogICAgICAgICAgICAgICJtaW5MZW5ndGgiIDogewogICAgICAgICAgICAgICAgInR5cGUiIDogWwogICAgICAgICAgICAgICAgICAibnVtYmVyIiwKICAgICAgICAgICAgICAgICAgInN0cmluZyIKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICAibWFya2Rvd25EZXNjcmlwdGlvbiIgOiAiTWluaW1hbCBsZW5ndGggb2YgdGhlIHN0cmluZyByZWFkIGZyb20gJ2V4ZWNQcm9jZXNzJyB0byByZWFkIGFzIGEgc3ltYm9sXG5cblNldHMgdGhlIG1pbmltYWwgbGVuZ3RoIGEgc3RyaW5nIHJlYWQgZnJvbSB0aGUgc2Nhbm5lciBwcm9jZXNzIHN0ZG91dCBtdXN0IGJlIHRvIGJlIGNvbnNpZGVyZWQgYSBzeW1ib2wgKEFjY2VwdHMgbnVtYmVyIG9yIHN0cmluZyB3aXRoICQ9IHByZWZpeCBmb3IgcnVudGltZSBldmFsdWF0aW9uKSIKICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICJtYXhMZW5ndGgiIDogewogICAgICAgICAgICAgICAgInR5cGUiIDogWwogICAgICAgICAgICAgICAgICAibnVtYmVyIiwKICAgICAgICAgICAgICAgICAgInN0cmluZyIKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICAibWFya2Rvd25EZXNjcmlwdGlvbiIgOiAiTWF4IGxlbmd0aCB0aGUgc3RyaW5nIHJlYWQgZnJvbSAnZXhlY1Byb2Nlc3MnIHRvIHJlYWQgYXMgYSBzeW1ib2xcblxuU2V0cyB0aGUgbWF4aW11bSBsZW5ndGggYSBzdHJpbmcgcmVhZCBmcm9tIHRoZSBzY2FubmVyIHByb2Nlc3Mgc3Rkb3V0IG11c3QgYmUgdG8gYmUgY29uc2lkZXJlZCBhIHN5bWJvbCAoQWNjZXB0cyBudW1iZXIgb3Igc3RyaW5nIHdpdGggJD0gcHJlZml4IGZvciBydW50aW1lIGV2YWx1YXRpb24pIgogICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgImZpbHRlcnMiIDogewogICAgICAgICAgICAgICAgInR5cGUiIDogWwogICAgICAgICAgICAgICAgICAiYXJyYXkiLAogICAgICAgICAgICAgICAgICAibnVsbCIKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICAibWFya2Rvd25EZXNjcmlwdGlvbiIgOiAiUGF0dGVybnMgYSBsaW5lIHJlYWQgZnJvbSAnZXhlY1Byb2Nlc3MnIG11c3QgTk9UIG1hdGNoXG5cbkRlZmluZXMgcmVnZXggcGF0dGVybnMgYXBwbGllZCB0byBlYWNoIGxpbmUgcmVhZCBmcm9tIHRoZSBzY2FubmVyIHByb2Nlc3MnIHN0ZG91dCB0aGF0IG11c3QgTk9UIG1hdGNoIGZvciB0aGUgbGluZSB2YWx1ZSB0byBiZSBjYXB0dXJlZCBhcyBhIHN5bWJvbC4gICBGb3IgZXhhbXBsZSwgdG8gYXZvaWQgW0FXQVYgYmluYXJ5XShodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8zOTMyMjU1Mi9tZWFuaW5nLW9mLWEtY29tbW9uLXN0cmluZy1pbi1leGVjdXRhYmxlcykgd2hlbiB1c2luZyB0aGUgYHN0cmluZ3NgIE9TIHV0aWxpdHksIHNwZWNpZnk6ICBgYGAgeWFtbCBleGVjU3ltYm9sRmlsdGVyczogICAtICBeQVdBViAgICAgIGBgYGAiLAogICAgICAgICAgICAgICAgIml0ZW1zIiA6IHsKICAgICAgICAgICAgICAgICAgInR5cGUiIDogInN0cmluZyIKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICJzZXRTZWxlY3RvcnMiIDogewogICAgICAgICAgICAgICAgInR5cGUiIDogWwogICAgICAgICAgICAgICAgICAiYXJyYXkiLAogICAgICAgICAgICAgICAgICAibnVsbCIKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICAibWFya2Rvd25EZXNjcmlwdGlvbiIgOiAiUmVnZXggcGF0dGVybnMgdG8gZGV0ZXJtaW5lcyB3aGV0aGVyIHRvIHRyZWF0IGFuIGlucHV0IHZhbHVlIGFzIHNldCBvZiB0b2tlbnNcblxuRGVmaW5lcyByZWdleCBwYXR0ZXJucyBtdXN0IEFMTCBtYXRjIHRvIHRyZWF0IGFuIGlucHV0IHZhbHVlIGFzIGEgbGluZSAoZS5nLiwgJ2Vycm9yIGNvbm5lY3RpbmcgdG8ge30nKSwgb3IgYXMgYSBzZXJpZXMgb2YgaW5kZXBlbmRlbnQgdG9rZW5zIChlLmcuLCAnZXJyb3InLCAnY29ubmVjdGluZycsICd0bycpIHRvIHJlZHVjZSB0aGUgY2FyZGluYWxpdHkgYW5kIHNpemUgb2YgdGhlIG91dHB1dCBzeW1ib2wgZmlsZS4gICBGb3IgZXhhbXBsZSwgd2hlbiBwcm9jZXNzaW5nIGZpbGVzIHRoYXQgY29udGFpbiB2YWx1ZXMgR08gY29tcGlsZSBzeW1ib2xzIHN1Y2ggYXM6ICAgYGBgIGdpdGh1Yi5jb20vb3Blbi10ZWxlbWV0cnkvb3BlbnRlbGVtZXRyeS1jb2xsZWN0b3ItY29udHJpYi9leHBvcnRlci9maWxlZXhwb3J0ZXIuZ3JvdXBbZ28uc2hhcGUuc3RydWN0IGBgYCAgU3BlY2lmeSB0aGUgcGF0dGVybiBiZWxvdyB0byBicmVhayB0aGUgc3RyaW5nIGludG8gc2VwYXJhdGUgc3ltYm9sIHRva2VucyAoZS5nLiwgc2hhcGUsIHN0cnVjdCwuLik6ICAgYGBgIHlhbWwgc2V0U2VsZWN0b3JzOiAgLSBeKD86Z2l0aHViXFwuY29tfGdvbGFuZ1xcLm9yZ3x0eXBlOlxcLmVxXFwuKD86Z2l0aHViXFwuY29tfGdvbGFuZ1xcLm9yZykpKC9bYS16QS1aMC05Xy1dKykqJCAtIF5bYS16QS1aMC05Xy86XFwuXFxbXFxdXFwqLC1dKig/OlxcLlthLXpBLVowLTldK3xcXFtbYS16QS1aMC05LFxcLlxcKi86Xy1dK1xcXXwtZm0pPyQgYGBgIiwKICAgICAgICAgICAgICAgICJpdGVtcyIgOiB7CiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJzdHJpbmciCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICB9LAogICAgICAgICAgImlzU3RydWN0dXJlZCIgOiB7CiAgICAgICAgICAgICJ0eXBlIiA6IFsKICAgICAgICAgICAgICAic3RyaW5nIiwKICAgICAgICAgICAgICAibnVsbCIKICAgICAgICAgICAgXSwKICAgICAgICAgICAgIm1hcmtkb3duRGVzY3JpcHRpb24iIDogIlNldHMgd2hldGhlciBvdXRwdXQgbGluZXMgcmVhZCBmcm9tICdleGVjUHJvY2VzcycgYXJlIHJlYWQgYXMgcGxhaW4gdGV4dCBvciBzdHJ1Y3R1cmVkIEpTT05cblxuQ29udHJvbHMgd2hldGhlciB0byByZWFkIHRoZSBbZXhlY1Byb2Nlc3NdKGh0dHBzOi8vZG9jLmxvZzEweC5jb20vY29tcGlsZS9zY2FubmVyL2V4ZWN1dGFibGUvI2V4ZWNwcm9jZXNzKSBzdGRvdXQgYXMgcGxhaW4gdGV4dCBvciBhcyBhIEpTT04gb2JqZWN0IGNvbnRhaW5pbmcgc291cmNlIGNvbnRleHQgaW5mb3JtYXRpb24uIElmIGZhbHNlIChkZWZhdWx0KSwgc3ltYm9sIHZhbHVlcyByZWFkIGZyb20gdGhlIHByb2Nlc3MnIG91dHB1dCBhcmUgbWFya2VkIGFzIGhhdmluZyBhbiBbZXhlY10oaHR0cHM6Ly9kb2MubG9nMTB4LmNvbS9ydW4vdHJhbnNmb3JtL3N5bWJvbC8jZXhlYykgY29udGV4dC4gVG8gbGVhcm4gbW9yZSBhYm91dCBwcm9kdWNpbmcgc3RydWN0dXJlZCBzeW1ib2wgdmFsdWVzLCBzZWUgW1N5bWJvbFVuaXQuamF2YV0oaHR0cHM6Ly9naXRodWIuY29tL2xvZy0xMHgvcGlwZWxpbmUtZXh0ZW5zaW9ucy9ibG9iL21haW4vY2xvdWQtZXh0ZW5zaW9ucy9zcmMvbWFpbi9qYXZhL2NvbS9sb2cxMHgvZXh0L2Nsb3VkL2NvbXBpbGUvc3ltYm9sL1N5bWJvbFVuaXQuamF2YSkiCiAgICAgICAgICB9LAogICAgICAgICAgInN5bWJvbHNQcmVmaXgiIDogewogICAgICAgICAgICAidHlwZSIgOiBbCiAgICAgICAgICAgICAgImJvb2xlYW4iLAogICAgICAgICAgICAgICJzdHJpbmciCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJBIHByZWZpeCBsaW5lcyByZWFkIGZyb20gJ2V4ZWNQcm9jZXNzJyBtdXN0IG1hdGNoIHRvIHBhcnNlIGFzIHN0cnVjdHVyZWQgSlNPTiBzeW1ib2xzXG5cblNldHMgYSBwcmVmaXggdGhhdCBtdXN0IHByZWNlZGUgbGluZXMgcmVhZCBmcm9tIHRoZSBzY2FuIHByb2Nlc3MnIHN0ZG91dCB0byBwYXJzZSBhcyBzdHJ1Y3R1cmVkIEpTT04gc3ltYm9sIHRyZWVzLiBPbmx5IGFwcGxpZXMgd2hlbiBbZXhlY0lzU3RydWN0dXJlZF0oaHR0cHM6Ly9kb2MubG9nMTB4LmNvbS9jb21waWxlL3NjYW5uZXIvZXhlY3V0YWJsZS8jZXhlY2lzc3RydWN0dXJlZCkgaXMgdHJ1ZSAoQWNjZXB0cyBib29sZWFuIG9yIHN0cmluZyB3aXRoICQ9IHByZWZpeCBmb3IgcnVudGltZSBldmFsdWF0aW9uKSIKICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgICJyZXF1aXJlZCIgOiBbCiAgICAgICAgICAibmFtZSIsCiAgICAgICAgICAib3NGaWx0ZXIiCiAgICAgICAgXQogICAgICB9CiAgICB9CiAgfSwKICAiYWRkaXRpb25hbFByb3BlcnRpZXMiIDogZmFsc2UKfQ==
# # 🔟❎ 'compile' executable 'strings' configuration
# This executable symbol scanner configuration uses OS-specific utilities to extract
# constant string values from pre-compiled binaries (e.g. programs, shared libraries).
# Any matching text values are added to the output symbol files.
# The following configuration is added by default to the 10x 'compile' pipeline.
# If another 'executable' scanner is defined whose 'osFilter' matches that of the
# current target input file, it will take precedence over the scanners defined below.
# To learn more about the 'executable' scanner,
# see: https://doc.log10x.com/compile/scanner/executable
# Set the 10x pipeline to 'compile'
tenx: compile
# =============================== Exec Options ================================
exec:
# This scanner uses the Linux built-in 'strings' (https://linux.die.net/man/1/file)
# command to extract symbol values from a target binary executable file
- name: stringsNIX
# This configuration targets NIX OSs
osFilter: (nix|nux|lux|mac)
# try for known extensions before invoking a 'selectorProcess'
extensions:
- .so
- .dynlib
# 'selector' processes provide a method for determining whether a file is an executable binary.
# If a selector process is not provided the file's ELF/PE/OSX binary header is tested.
# Since on NIX, executables do not have a known extension,
# the 'selector' process uses the built-in 'file' command whose
# output is used to verify the target file is a NIX executable file.
selector:
process: file
args:
- file # this macro value is replaced at run-time by the actual input file name
timeout: 5s
outputFilter: ".*?\\bexecutable\\b.*?" # select 'executable' files
process: strings
args:
- -a # scan the whole file, not just initialized and loaded sections
- file # This macro value is replaced at run-time by the actual text/binary input file
timeout: 100s
symbol:
# 'minLength' specifies the min number of chars a value extracted via strings must be to
# in order to qualify as a symbol.
minLength: 4
# 'maxLength' specifies the max number of chars a value extracted via strings must be to
# in order to qualify as a symbol.
maxLength: 1024
# 'filters' defines regex patterns applied to each line read from the scanner process' stdout
# that must NOT match for the line value to be considered a symbol.
filters:
- AWAV. # https://stackoverflow.com/questions/39322552/meaning-of-a-common-string-in-executables
- "^(?=^.{0,7}$)(?=.*[^a-zA-Z]).*$" # Matches any string that is shorter than 8 characters (0 to 7 chars) and contains at least one non-alphabetic character.
# 'setSelector' specifies regex patterns that determines whether to treat an input value as set of tokens
setSelectors:
- '^[0-9].*$' # Starts with digit
- '^\*.*$' # Starts with *
- '^(?:[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?\.)+[a-zA-Z]{2,}(?:/[^\s]*)?$' # Domain + optional path (e.g., github.com/user/repo)
- '^type:\\..*$' # Go land metadata starts with "type:." (any suffix)
Strings-win
Configure Executable scanners to launch a target process from which to read symbol values via its stdout.
Below is the default configuration from: executable/strings-win.yaml.
ewogICJ0eXBlIiA6ICJvYmplY3QiLAogICJwcm9wZXJ0aWVzIiA6IHsKICAgICJ0ZW54IiA6IHsKICAgICAgInR5cGUiIDogInN0cmluZyIKICAgIH0sCiAgICAiZXhlYyIgOiB7CiAgICAgICJ0eXBlIiA6ICJhcnJheSIsCiAgICAgICJpdGVtcyIgOiB7CiAgICAgICAgInR5cGUiIDogIm9iamVjdCIsCiAgICAgICAgImFkZGl0aW9uYWxQcm9wZXJ0aWVzIiA6IGZhbHNlLAogICAgICAgICJwcm9wZXJ0aWVzIiA6IHsKICAgICAgICAgICJuYW1lIiA6IHsKICAgICAgICAgICAgInR5cGUiIDogWwogICAgICAgICAgICAgICJzdHJpbmciLAogICAgICAgICAgICAgICJudWxsIgogICAgICAgICAgICBdLAogICAgICAgICAgICAibWFya2Rvd25EZXNjcmlwdGlvbiIgOiAiQSBsb2dpY2FsIG5hbWUgZm9yIHRoaXMgZXhlYyBzY2FubmVyXG5cbkEgbG9naWNhbCBuYW1lIGZvciB0aGlzIGV4ZWMgc2Nhbm5lciB1bmlxdWUgYW1vbmdzdCBhbGwgc3BlY2lmaWVkIHNjYW5uZXIgb3B0aW9uIGdyb3VwcyAoZS5nLiwgJ3N0cmluZ3NOSVgnKSIKICAgICAgICAgIH0sCiAgICAgICAgICAib3NGaWx0ZXIiIDogewogICAgICAgICAgICAidHlwZSIgOiBbCiAgICAgICAgICAgICAgInN0cmluZyIsCiAgICAgICAgICAgICAgIm51bGwiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJBIHBhdHRlcm4gdGhhdCBtdXN0IG1hdGNoIHRoZSBuYW1lIG9mIHRoZSBob3N0IE9TIHRvIGFwcGx5IHRoaXMgc2Nhbm5lci5cblxuRGVmaW5lcyBhIHBhdHRlcm4gdG8gbWF0Y2ggYWdhaW5zdCB0aGUgbmFtZSBvZiB0aGUgaG9zdCBPUyB0byBkZXRlcm1pbmUgd2hldGhlciB0byBhcHBseSB0aGlzIHNjYW5uZXIuIgogICAgICAgICAgfSwKICAgICAgICAgICJleHRlbnNpb25zIiA6IHsKICAgICAgICAgICAgInR5cGUiIDogWwogICAgICAgICAgICAgICJhcnJheSIsCiAgICAgICAgICAgICAgIm51bGwiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJBIGxpc3Qgb2YgZmlsZSBleHRlbnNpb25zIGEgdGFyZ2V0IGZpbGUgbXVzdCBtYXRjaCB0byBhcHBseSB0aGlzIHNjYW5uZXJcblxuQW4gYXJyYXkgb2YgZmlsZSBleHRlbnNpb25zIHRvIHRlc3QgYSBmaWxlIGNhbmRpZGF0ZSBhZ2FpbnN0LiBJZiB0aGUgY2FuZGlkYXRlIG1hdGNoZXMgYW55IGV4dGVuc2lvbnMsIGFwcGx5IHRoaXMgc2Nhbm5lci4iLAogICAgICAgICAgICAiaXRlbXMiIDogewogICAgICAgICAgICAgICJ0eXBlIiA6ICJzdHJpbmciCiAgICAgICAgICAgIH0KICAgICAgICAgIH0sCiAgICAgICAgICAiZmlsZU5hbWVGaWx0ZXIiIDogewogICAgICAgICAgICAidHlwZSIgOiBbCiAgICAgICAgICAgICAgInN0cmluZyIsCiAgICAgICAgICAgICAgIm51bGwiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJBIHBhdHRlcm4gdGhhdCB0aGUgdGFyZ2V0IGlucHV0IGZpbGUgbXVzdCBtYXRjaCB0byBhcHBseSB0aGlzIHNjYW5uZXJcblxuU2V0cyBhIHJlZ2V4IHBhdHRlcm4gdG8gdGVzdCBhIGZpbGUgY2FuZGlkYXRlIG5hbWUgYWdhaW5zdC4gSWYgdGhlIGNhbmRpZGF0ZSBtYXRjaGVzIGFueSBvZiB0aGUgZXh0ZW5zaW9ucywgYXBwbHkgdGhpcyBzY2FubmVyLiIKICAgICAgICAgIH0sCiAgICAgICAgICAic2VsZWN0b3IiIDogewogICAgICAgICAgICAidHlwZSIgOiAib2JqZWN0IiwKICAgICAgICAgICAgImFkZGl0aW9uYWxQcm9wZXJ0aWVzIiA6IGZhbHNlLAogICAgICAgICAgICAicHJvcGVydGllcyIgOiB7CiAgICAgICAgICAgICAgInByb2Nlc3MiIDogewogICAgICAgICAgICAgICAgInR5cGUiIDogWwogICAgICAgICAgICAgICAgICAic3RyaW5nIiwKICAgICAgICAgICAgICAgICAgIm51bGwiCiAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgIm1hcmtkb3duRGVzY3JpcHRpb24iIDogIk5hbWUgb2YgYSBwcm9jZXNzIHRvIGxhdW5jaCB3aG9zZSBvdXRwdXQgd2hldGhlciB0byBhcHBseSB0aGlzIGlucHV0XG5cbkRlZmluZSBhIHByb2Nlc3MgbmFtZSB0byBsYXVuY2ggdG8gb2J0YWluIGluZm9ybWF0aW9uIGFib3V0IHRoZSBpbnB1dCBmaWxlLiBJbiBzb21lIE9TcyAoZS5nLiwgTGludXgvVW5peCksIGV4ZWN1dGFibGUgZmlsZXMgZG8gbm90IG5lY2Vzc2FyaWx5IGhhdmUgYSBrbm93biBleHRlbnNpb24uIEZvciB0aGlzLCBhbiBPUyB1dGlsaXR5IHN1Y2ggYXMgTklYIFtmaWxlXShodHRwczovL21hbjcub3JnL2xpbnV4L21hbi1wYWdlcy9tYW4xL2ZpbGUuMS5odG1sKSBjYW4gb2J0YWluIGluZm9ybWF0aW9uIG9uIHRoZSBhY3R1YWwgZmlsZSBjb250ZW50cy4gIElmIGEgc2VsZWN0b3IgcHJvY2VzcyBpcyBub3QgcHJvdmlkZWQgdGhlIGZpbGUncyBFTEYvUEUvT1NYIGJpbmFyeSBoZWFkZXIgaXMgdGVzdGVkIGZvciBhIHBvc3NpYmxlIG1hdGNoLiIKICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICJ3b3JrRGlyIiA6IHsKICAgICAgICAgICAgICAgICJ0eXBlIiA6IFsKICAgICAgICAgICAgICAgICAgInN0cmluZyIsCiAgICAgICAgICAgICAgICAgICJudWxsIgogICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJUaGUgcGF0aCBvZiB0aGUgd29ya2luZyBkaXJlY3Rvcnkgd2hlbiBydW5uaW5nICdleGVjU2VsZWN0b3JQcm9jZXNzJ1xuXG5EZWZpbmVzIHRoZSB3b3JraW5nIGRpcmVjdG9yeSB3aGVuIHJ1bm5pbmcgW2V4ZWNTZWxlY3RvclByb2Nlc3NdKGh0dHBzOi8vZG9jLmxvZzEweC5jb20vY29tcGlsZS9zY2FubmVyL2V4ZWN1dGFibGUvI2V4ZWNzZWxlY3RvcnByb2Nlc3MpLiBJZiBvbWl0dGVkLCB3aWxsIHVzZSB0aGUgdGhlIHdvcmtpbmcgZGlyZWN0b3J5LiIKICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICJhcmdzIiA6IHsKICAgICAgICAgICAgICAgICJ0eXBlIiA6IFsKICAgICAgICAgICAgICAgICAgImFycmF5IiwKICAgICAgICAgICAgICAgICAgIm51bGwiCiAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgIm1hcmtkb3duRGVzY3JpcHRpb24iIDogIkxpc3Qgb2YgYXJndW1lbnRzIHBhc3NlZCB0byAnZXhlY1NlbGVjdG9yUHJvY2VzcydcblxuRGVmaW5lcyBhcmd1bWVudHMgZm9yIHRoZSBzZWxlY3RvciBwcm9jZXNzLCBpZiBwcm92aWRlZC4gVGhlIGBmaWxlYCBtYWNybyB0YWtlcyB0aGUgdmFsdWUgb2YgdGhlIHRhcmdldCBleGVjIGZpbGUgdG8gbGF1bmNoLiIsCiAgICAgICAgICAgICAgICAiaXRlbXMiIDogewogICAgICAgICAgICAgICAgICAidHlwZSIgOiAic3RyaW5nIgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgInRpbWVvdXQiIDogewogICAgICAgICAgICAgICAgInR5cGUiIDogWwogICAgICAgICAgICAgICAgICAic3RyaW5nIiwKICAgICAgICAgICAgICAgICAgIm51bGwiCiAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgIm1hcmtkb3duRGVzY3JpcHRpb24iIDogIlRpbWVvdXQgcGVyaW9kIGFmdGVyIHdoaWNoIHRvIHRlcm1pbmF0ZSAnZXhlY1NlbGVjdG9yUHJvY2VzcyBwcm9jZXNzXG5cblNldHMgaG93IGxvbmcgdG8gYWxsb3cgdGhlIHNlbGVjdG9yIHByb2Nlc3MgdG8gcnVuIGJlZm9yZSB0ZXJtaW5hdGlvbiAoZS5nLiAnMTBzJykiCiAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAib3V0cHV0RmlsdGVyIiA6IHsKICAgICAgICAgICAgICAgICJ0eXBlIiA6IFsKICAgICAgICAgICAgICAgICAgInN0cmluZyIsCiAgICAgICAgICAgICAgICAgICJudWxsIgogICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJBIGZpbHRlciBwYXR0ZXJuIHRoYXQgbXVzdCBtYXRjaCB0aGUgb3V0cHV0IG9mICdleGVjU2VsZWN0b3JQcm9jZXNzJyB0byBhcHBseSB0aGlzIHNjYW5uZXJcblxuRGVmaW5lcyBhIHJlZ2V4IHBhdHRlcm4gdG8gbWF0Y2ggYWdhaW5zdCB0aGUgY29udGVudHMgb2YgdGhlIHN0ZG91dCBzdHJlYW0gcmVhZCBmcm9tIHRoZSBbZXhlY1NlbGVjdG9yUHJvY2Vzc10oaHR0cHM6Ly9kb2MubG9nMTB4LmNvbS9jb21waWxlL3NjYW5uZXIvZXhlY3V0YWJsZS8jZXhlY3NlbGVjdG9ycHJvY2VzcykgcHJvY2Vzcy4gSWYgbWF0Y2hlZCwgYXBwbHkgdGhpcyBzY2FubmVyIHRvIHRoZSBpbnB1dCBmaWxlLiIKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIH0sCiAgICAgICAgICAicHJvY2VzcyIgOiB7CiAgICAgICAgICAgICJ0eXBlIiA6IFsKICAgICAgICAgICAgICAic3RyaW5nIiwKICAgICAgICAgICAgICAibnVsbCIKICAgICAgICAgICAgXSwKICAgICAgICAgICAgIm1hcmtkb3duRGVzY3JpcHRpb24iIDogIlByb2Nlc3MgdG8gbGF1bmNoIGZvciBleHRyYWN0aW5nIHN5bWJvbCB2YWx1ZXNcblxuRGVmaW5lcyBhIHByb2Nlc3MgdG8gbGF1bmNoIGFuZCB3aG9zZSBzdGRvdXQgcGlwZSB0byBwYXJzZSBmb3Igc3ltYm9sIHZhbHVlcy4iCiAgICAgICAgICB9LAogICAgICAgICAgIndvcmtEaXIiIDogewogICAgICAgICAgICAidHlwZSIgOiBbCiAgICAgICAgICAgICAgInN0cmluZyIsCiAgICAgICAgICAgICAgIm51bGwiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJUaGUgcGF0aCBvZiB0aGUgd29ya2luZyBkaXJlY3Rvcnkgd2hlbiBydW5uaW5nICdleGVjUHJvY2VzcydcblxuRGVmaW5lcyB0aGUgd29ya2luZyBkaXJlY3Rvcnkgd2hlbiBydW5uaW5nIFtleGVjUHJvY2Vzc10oaHR0cHM6Ly9kb2MubG9nMTB4LmNvbS9jb21waWxlL3NjYW5uZXIvZXhlY3V0YWJsZS8jZXhlY3Byb2Nlc3MpLiBJZiBvbWl0dGVkLCB1c2VzIHRoZSB3b3JraW5nIGRpcmVjdG9yeS4iCiAgICAgICAgICB9LAogICAgICAgICAgImFyZ3MiIDogewogICAgICAgICAgICAidHlwZSIgOiBbCiAgICAgICAgICAgICAgImFycmF5IiwKICAgICAgICAgICAgICAibnVsbCIKICAgICAgICAgICAgXSwKICAgICAgICAgICAgIm1hcmtkb3duRGVzY3JpcHRpb24iIDogIkxpc3Qgb2YgYXJndW1lbnRzIHBhc3NlZCB0byAnZXhlY1Byb2Nlc3MnICgnZmlsZScgaXMgcmVwbGFjZWQgYnkgc2NhbiB0YXJnZXQpXG5cbkRlZmluZXMgbGF1bmNoIGFyZ3VtZW50cyBbZXhlY1Byb2Nlc3NdKGh0dHBzOi8vZG9jLmxvZzEweC5jb20vY29tcGlsZS9zY2FubmVyL2V4ZWN1dGFibGUvI2V4ZWNwcm9jZXNzKS4gVGhlIGBmaWxlYCBtYWNybyBleHBhbmRzIGludG8gdGhlIGlucHV0IGZpbGUgcGF0aCIsCiAgICAgICAgICAgICJpdGVtcyIgOiB7CiAgICAgICAgICAgICAgInR5cGUiIDogInN0cmluZyIKICAgICAgICAgICAgfQogICAgICAgICAgfSwKICAgICAgICAgICJ0aW1lb3V0IiA6IHsKICAgICAgICAgICAgInR5cGUiIDogWwogICAgICAgICAgICAgICJzdHJpbmciLAogICAgICAgICAgICAgICJudWxsIgogICAgICAgICAgICBdLAogICAgICAgICAgICAibWFya2Rvd25EZXNjcmlwdGlvbiIgOiAiVGltZW91dCBwZXJpb2QgYWZ0ZXIgd2hpY2ggdG8gdGVybWluYXRlICdleGVjUHJvY2VzcycgcHJvY2Vzc1xuXG5EZWZpbmVzIGhvdyBsb25nIFtleGVjUHJvY2Vzc10oaHR0cHM6Ly9kb2MubG9nMTB4LmNvbS9jb21waWxlL3NjYW5uZXIvZXhlY3V0YWJsZS8jZXhlY3Byb2Nlc3MpIGlzIGFsbG93ZWQgdG8gcnVuIGJlZm9yZSB0ZXJtaW5hdGlvbiIKICAgICAgICAgIH0sCiAgICAgICAgICAic3ltYm9sIiA6IHsKICAgICAgICAgICAgInR5cGUiIDogIm9iamVjdCIsCiAgICAgICAgICAgICJhZGRpdGlvbmFsUHJvcGVydGllcyIgOiBmYWxzZSwKICAgICAgICAgICAgInByb3BlcnRpZXMiIDogewogICAgICAgICAgICAgICJtaW5MZW5ndGgiIDogewogICAgICAgICAgICAgICAgInR5cGUiIDogWwogICAgICAgICAgICAgICAgICAibnVtYmVyIiwKICAgICAgICAgICAgICAgICAgInN0cmluZyIKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICAibWFya2Rvd25EZXNjcmlwdGlvbiIgOiAiTWluaW1hbCBsZW5ndGggb2YgdGhlIHN0cmluZyByZWFkIGZyb20gJ2V4ZWNQcm9jZXNzJyB0byByZWFkIGFzIGEgc3ltYm9sXG5cblNldHMgdGhlIG1pbmltYWwgbGVuZ3RoIGEgc3RyaW5nIHJlYWQgZnJvbSB0aGUgc2Nhbm5lciBwcm9jZXNzIHN0ZG91dCBtdXN0IGJlIHRvIGJlIGNvbnNpZGVyZWQgYSBzeW1ib2wgKEFjY2VwdHMgbnVtYmVyIG9yIHN0cmluZyB3aXRoICQ9IHByZWZpeCBmb3IgcnVudGltZSBldmFsdWF0aW9uKSIKICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICJtYXhMZW5ndGgiIDogewogICAgICAgICAgICAgICAgInR5cGUiIDogWwogICAgICAgICAgICAgICAgICAibnVtYmVyIiwKICAgICAgICAgICAgICAgICAgInN0cmluZyIKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICAibWFya2Rvd25EZXNjcmlwdGlvbiIgOiAiTWF4IGxlbmd0aCB0aGUgc3RyaW5nIHJlYWQgZnJvbSAnZXhlY1Byb2Nlc3MnIHRvIHJlYWQgYXMgYSBzeW1ib2xcblxuU2V0cyB0aGUgbWF4aW11bSBsZW5ndGggYSBzdHJpbmcgcmVhZCBmcm9tIHRoZSBzY2FubmVyIHByb2Nlc3Mgc3Rkb3V0IG11c3QgYmUgdG8gYmUgY29uc2lkZXJlZCBhIHN5bWJvbCAoQWNjZXB0cyBudW1iZXIgb3Igc3RyaW5nIHdpdGggJD0gcHJlZml4IGZvciBydW50aW1lIGV2YWx1YXRpb24pIgogICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgImZpbHRlcnMiIDogewogICAgICAgICAgICAgICAgInR5cGUiIDogWwogICAgICAgICAgICAgICAgICAiYXJyYXkiLAogICAgICAgICAgICAgICAgICAibnVsbCIKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICAibWFya2Rvd25EZXNjcmlwdGlvbiIgOiAiUGF0dGVybnMgYSBsaW5lIHJlYWQgZnJvbSAnZXhlY1Byb2Nlc3MnIG11c3QgTk9UIG1hdGNoXG5cbkRlZmluZXMgcmVnZXggcGF0dGVybnMgYXBwbGllZCB0byBlYWNoIGxpbmUgcmVhZCBmcm9tIHRoZSBzY2FubmVyIHByb2Nlc3MnIHN0ZG91dCB0aGF0IG11c3QgTk9UIG1hdGNoIGZvciB0aGUgbGluZSB2YWx1ZSB0byBiZSBjYXB0dXJlZCBhcyBhIHN5bWJvbC4gICBGb3IgZXhhbXBsZSwgdG8gYXZvaWQgW0FXQVYgYmluYXJ5XShodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8zOTMyMjU1Mi9tZWFuaW5nLW9mLWEtY29tbW9uLXN0cmluZy1pbi1leGVjdXRhYmxlcykgd2hlbiB1c2luZyB0aGUgYHN0cmluZ3NgIE9TIHV0aWxpdHksIHNwZWNpZnk6ICBgYGAgeWFtbCBleGVjU3ltYm9sRmlsdGVyczogICAtICBeQVdBViAgICAgIGBgYGAiLAogICAgICAgICAgICAgICAgIml0ZW1zIiA6IHsKICAgICAgICAgICAgICAgICAgInR5cGUiIDogInN0cmluZyIKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICJzZXRTZWxlY3RvcnMiIDogewogICAgICAgICAgICAgICAgInR5cGUiIDogWwogICAgICAgICAgICAgICAgICAiYXJyYXkiLAogICAgICAgICAgICAgICAgICAibnVsbCIKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICAibWFya2Rvd25EZXNjcmlwdGlvbiIgOiAiUmVnZXggcGF0dGVybnMgdG8gZGV0ZXJtaW5lcyB3aGV0aGVyIHRvIHRyZWF0IGFuIGlucHV0IHZhbHVlIGFzIHNldCBvZiB0b2tlbnNcblxuRGVmaW5lcyByZWdleCBwYXR0ZXJucyBtdXN0IEFMTCBtYXRjIHRvIHRyZWF0IGFuIGlucHV0IHZhbHVlIGFzIGEgbGluZSAoZS5nLiwgJ2Vycm9yIGNvbm5lY3RpbmcgdG8ge30nKSwgb3IgYXMgYSBzZXJpZXMgb2YgaW5kZXBlbmRlbnQgdG9rZW5zIChlLmcuLCAnZXJyb3InLCAnY29ubmVjdGluZycsICd0bycpIHRvIHJlZHVjZSB0aGUgY2FyZGluYWxpdHkgYW5kIHNpemUgb2YgdGhlIG91dHB1dCBzeW1ib2wgZmlsZS4gICBGb3IgZXhhbXBsZSwgd2hlbiBwcm9jZXNzaW5nIGZpbGVzIHRoYXQgY29udGFpbiB2YWx1ZXMgR08gY29tcGlsZSBzeW1ib2xzIHN1Y2ggYXM6ICAgYGBgIGdpdGh1Yi5jb20vb3Blbi10ZWxlbWV0cnkvb3BlbnRlbGVtZXRyeS1jb2xsZWN0b3ItY29udHJpYi9leHBvcnRlci9maWxlZXhwb3J0ZXIuZ3JvdXBbZ28uc2hhcGUuc3RydWN0IGBgYCAgU3BlY2lmeSB0aGUgcGF0dGVybiBiZWxvdyB0byBicmVhayB0aGUgc3RyaW5nIGludG8gc2VwYXJhdGUgc3ltYm9sIHRva2VucyAoZS5nLiwgc2hhcGUsIHN0cnVjdCwuLik6ICAgYGBgIHlhbWwgc2V0U2VsZWN0b3JzOiAgLSBeKD86Z2l0aHViXFwuY29tfGdvbGFuZ1xcLm9yZ3x0eXBlOlxcLmVxXFwuKD86Z2l0aHViXFwuY29tfGdvbGFuZ1xcLm9yZykpKC9bYS16QS1aMC05Xy1dKykqJCAtIF5bYS16QS1aMC05Xy86XFwuXFxbXFxdXFwqLC1dKig/OlxcLlthLXpBLVowLTldK3xcXFtbYS16QS1aMC05LFxcLlxcKi86Xy1dK1xcXXwtZm0pPyQgYGBgIiwKICAgICAgICAgICAgICAgICJpdGVtcyIgOiB7CiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJzdHJpbmciCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICB9LAogICAgICAgICAgImlzU3RydWN0dXJlZCIgOiB7CiAgICAgICAgICAgICJ0eXBlIiA6IFsKICAgICAgICAgICAgICAic3RyaW5nIiwKICAgICAgICAgICAgICAibnVsbCIKICAgICAgICAgICAgXSwKICAgICAgICAgICAgIm1hcmtkb3duRGVzY3JpcHRpb24iIDogIlNldHMgd2hldGhlciBvdXRwdXQgbGluZXMgcmVhZCBmcm9tICdleGVjUHJvY2VzcycgYXJlIHJlYWQgYXMgcGxhaW4gdGV4dCBvciBzdHJ1Y3R1cmVkIEpTT05cblxuQ29udHJvbHMgd2hldGhlciB0byByZWFkIHRoZSBbZXhlY1Byb2Nlc3NdKGh0dHBzOi8vZG9jLmxvZzEweC5jb20vY29tcGlsZS9zY2FubmVyL2V4ZWN1dGFibGUvI2V4ZWNwcm9jZXNzKSBzdGRvdXQgYXMgcGxhaW4gdGV4dCBvciBhcyBhIEpTT04gb2JqZWN0IGNvbnRhaW5pbmcgc291cmNlIGNvbnRleHQgaW5mb3JtYXRpb24uIElmIGZhbHNlIChkZWZhdWx0KSwgc3ltYm9sIHZhbHVlcyByZWFkIGZyb20gdGhlIHByb2Nlc3MnIG91dHB1dCBhcmUgbWFya2VkIGFzIGhhdmluZyBhbiBbZXhlY10oaHR0cHM6Ly9kb2MubG9nMTB4LmNvbS9ydW4vdHJhbnNmb3JtL3N5bWJvbC8jZXhlYykgY29udGV4dC4gVG8gbGVhcm4gbW9yZSBhYm91dCBwcm9kdWNpbmcgc3RydWN0dXJlZCBzeW1ib2wgdmFsdWVzLCBzZWUgW1N5bWJvbFVuaXQuamF2YV0oaHR0cHM6Ly9naXRodWIuY29tL2xvZy0xMHgvcGlwZWxpbmUtZXh0ZW5zaW9ucy9ibG9iL21haW4vY2xvdWQtZXh0ZW5zaW9ucy9zcmMvbWFpbi9qYXZhL2NvbS9sb2cxMHgvZXh0L2Nsb3VkL2NvbXBpbGUvc3ltYm9sL1N5bWJvbFVuaXQuamF2YSkiCiAgICAgICAgICB9LAogICAgICAgICAgInN5bWJvbHNQcmVmaXgiIDogewogICAgICAgICAgICAidHlwZSIgOiBbCiAgICAgICAgICAgICAgImJvb2xlYW4iLAogICAgICAgICAgICAgICJzdHJpbmciCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJBIHByZWZpeCBsaW5lcyByZWFkIGZyb20gJ2V4ZWNQcm9jZXNzJyBtdXN0IG1hdGNoIHRvIHBhcnNlIGFzIHN0cnVjdHVyZWQgSlNPTiBzeW1ib2xzXG5cblNldHMgYSBwcmVmaXggdGhhdCBtdXN0IHByZWNlZGUgbGluZXMgcmVhZCBmcm9tIHRoZSBzY2FuIHByb2Nlc3MnIHN0ZG91dCB0byBwYXJzZSBhcyBzdHJ1Y3R1cmVkIEpTT04gc3ltYm9sIHRyZWVzLiBPbmx5IGFwcGxpZXMgd2hlbiBbZXhlY0lzU3RydWN0dXJlZF0oaHR0cHM6Ly9kb2MubG9nMTB4LmNvbS9jb21waWxlL3NjYW5uZXIvZXhlY3V0YWJsZS8jZXhlY2lzc3RydWN0dXJlZCkgaXMgdHJ1ZSAoQWNjZXB0cyBib29sZWFuIG9yIHN0cmluZyB3aXRoICQ9IHByZWZpeCBmb3IgcnVudGltZSBldmFsdWF0aW9uKSIKICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgICJyZXF1aXJlZCIgOiBbCiAgICAgICAgICAibmFtZSIsCiAgICAgICAgICAib3NGaWx0ZXIiCiAgICAgICAgXQogICAgICB9CiAgICB9CiAgfSwKICAiYWRkaXRpb25hbFByb3BlcnRpZXMiIDogZmFsc2UKfQ==
# # 🔟❎ 'compile' executable 'strings' configuration
# This executable symbol scanner configuration uses OS-specific utilities to extract
# constant string values from pre-compiled binaries (e.g. programs, shared libraries).
# Any matching text values are added to the output symbol files.
# The following configuration is added by default to the 10x 'compile' pipeline.
# If another 'executable' scanner is defined whose 'osFilter' matches that of the
# current target input file, it will take precedence over the scanners defined below.
# To learn more about the 'executable' scanner,
# see: https://doc.log10x.com/compile/scanner/executable/
# Set the 10x pipeline to 'compile'
tenx: compile
# =============================== Exec Options ================================
exec:
# This configuration provides a similar capability for scanning Windows executable files.
# *IMPORTANT*: On Windows, the 'strings' command is not installed by default and
# should be downloaded from: https://docs.microsoft.com/en-us/sysinternals/downloads/strings
# and added to 'PATH'
- name: stringsWin
# target Win
osFilter: win
extensions:
- .so
- .dll
process: strings
args:
- file # This macro value is replaced at run-time by the actual input file name
timeout: 10s
This app is defined in compiler/app.yaml.